Querydsl은 JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API이다.
소스코드로 SQL문을 문자열이 아닌 코드로 작성하기 때문에 컵파일러의 도움을 받을 수 있다.
소스 작성시 오타가 발생하면 오타가 있음을 알려준다.
Querydsl 사용하기 위해 필요한 설정을 추가해줘야 한다.
pom.xml에 Qdomain이라는 자바코드를 생성하는 플러그인 추. 엔티티 기반으로 접두사(prefix)로 'Q'가 붙는 클래스들을 자동으로 생성해주는 플러그인
예를 들어 Item테이블의 경우 QItem.java 클래스가 자동으로 생성된다.
<!-- Querydsl의존성 주입 -->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<!--생략...-->
<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>
필요한 설정을 추가 한 뒤, 메이븐 빌더로 들어가서 compile 입력해주고, run 클릭 후
target 디렉토리 안에 QItem.java 파일생성된걸 확인할 수 있다.
Querydsl을 사용하기 기본적인 셋팅은 끝!
QuerydslPredicateExecutor 인터페이스 상속을 추가한다.
public interface ItemRepository extends JpaRepository<Item, Long>,
QuerydslPredicateExecutor<Item>{
}
//영속성 컨텍스트를 사용하기 위해 어노테이션을 이용해 EntityManager 빈을 주입
@PersistenceContext
EntityManager em;
@Test
@DisplayName("Querydsl 조회테스트 1")
public void queryDlsTest() {
this.createItemList();
//JPAQueryFactory를 이용하여 쿼리를 동적으로 생성
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
//Querydsl을 통해 쿼리를 생성하기 위해 플러그인을 통해 자동으로 생성된 QItem 객체를 이용
QItem qItem = QItem.item;
//자바 소스코드지만 SQL문과 비슷하게 소스를 작성할 수 있다.
JPAQuery<Item> query = queryFactory.selectFrom(qItem)
.where(qItem.itemStatus.eq(ItemStatus.SELL))
.where(qItem.itemDetail.like("%" + "테스트 상품 상세 설명" + "%"))
.orderBy(qItem.price.desc());
List<Item> itemList = query.fetch();
for(Item item : itemList) {
System.out.println(item.toString());
}
}
메서드 | 기능 |
---|---|
List fetch() | 조회 결과 리스트 반환 |
T fetchOne | 조회 대상이 1건인 경우 제네릭으로 지정한 타입 반환 |
T fetchFirst | 조회 대상 중 1건만 반환 |
Long fetchCount() | 조회 대상 개수 반환 |
QueryResult fetchResult() | 조회한 리스트와 전체 개수를 포함한 QueryResults 반환 |
실행된 쿼리문을 확인해보면 JPAQuery에 추가한 판매상태 코드와 상품 상세 설명이 where 조건에 추가되어 있고, 상품의 가격이 내림차순으로 정렬돼 데이터를 조회되는 쿼리문이 나와있는걸 볼 수 있다.