본문 바로가기
Back-End/Spring Boot

Spring Boot - Spring DATA JPA Querydsl

by 코젼 2022. 7. 22.
728x90
반응형

2022-07-21(24일차)


💡Querydsl

💁‍♀️ @Query 어노테이션 안에 JPQL문법으로 문자열을 입력하기 때문에 잘못 입력하면 컴파일 시점에 에러를 발견할 수 없습니다. 이를 보완하는 방법으로 Querydsl가 있습니다.


💡Querydsl 장점

▪️ 고정된 SQL문이 아닌 조건에 맞게 동적으로 쿼리생성할 수 있습니다.
▪️ 비슷한 쿼리를 재사용할 수 있으며 제약 조건 조립 및 가독성을 향상시킬 수 있습니다.
▪️ 문자열이 아닌 자바 소스코드로 작성하기 때문에 컴파일 시점에 오류를 발견할 수 있습니다.
▪️ IDE의 도움을 받아서 자동 완성 기능을 이용할 수 있기 때문에 생산성을 향상시킬 수 있습니다.

💁‍♀️Querydsl을 사용하기 위해서는 설정을 추가해야합니다.

▪️ pom.xml 파일의 <dependencies> </dependencies> 사이에 의존성 추가

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>4.3.1</version>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <version>4.3.1</version>
</dependency>

▪️ pom.xml에 Qdomain이라는 자바 코드를 생성하는 플러그인을 추가한다.

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/java</outputDirectory>
                <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
</plugin>

💡JPAQuery 데이터 반환 메소드

List<T> fetch() 조회 결과 리스트 반환
T fetchOne() 조회 결과 대상이 1건인 경우
T fetchFirst() 조회 대상 중 1건만 반환
Long fetchCount() 조회 대상 개수 반환
QueryResult<T> fetchResults() 조회한 리스트와 전체 개수 반환

▪️ "%"는 like이다.

▪️ Long을 사용한 이유는 조회 대상 개수가 무수히 많을 수 있기 때문에 Integer를 사용하지 않는다.


JPAQuery<Item> query = queryFactory.selectFrom(qItem)
                .where(qItem.itemSellStatus.eq(ItemSellStatus.SELL))
                .where(qItem.itemDetail.like("%" + "테스트 상품 상세 설명" + "%"))
                .orderBy(qItem.price.desc());

▪️ .을 붙이면서 앞에서 끝난 결과를 뒷 부분에서 실행한다.

728x90
반응형

댓글