Querydsl은 JPQL을 코드로 작성할 수 있도록 도와주는 빌더 API입니다. Querydsl은 소스코드로 SQL문을 문자열이 아닌 코드로 작성하기 때문에 컴파일러의 도움을 받을 수 있습니다.
Querydsl을 사용해보겠습니다
<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이라는 자바 코드를 생성하는 플러그인을 추가해줍니다.
엔티티를 기반으로 접두사에 'Q'가 붙는 클래스들을 자동으로 생성해주는 플러그인입니다.
ex) Item 테이블 -> QItem.java 클래스 자동 생성
Querydsl을 통해서 쿼리를 생성할 떄 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>
@Test
@DisplayName("Querydsl 조회 테스트1")
public void queryDslTest(){
this.createItemList();
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
QItem qItem = QItem.item;
JPAQuery<Item> query = queryFactory.selectFrom(qItem)
.where(qItem.itemSellStatus.eq(ItemSellStatus.SELL))
.where(qItem.itemDetail.like("%" + "테스트 상품 상세 설명" + "%"))
.orderBy(qItem.price.desc());
List<Item> itemList = query.fetch();
for(Item item : itemList) {
System.out.println(item.toString());
}
}
메소드 | 기능 |
---|---|
List< T > fetch() | 조회 결과 리스트 반환 |
T fetchOne | 조회 대상이 1건인 경우 제네릭으로 지정한 타입 반환 |
T fetchFirst() | 조회 대상 중 1건만 반환 |
Long fetchCount() | 조회 대상 개수 반환 |
QueryResult< T > fetchResults() | 조회한 리스트와 전체 개수를 포함한 QueryResults 반환 |
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
application.properties Live Reload 적용 설정 추가
spring.devtools.livereload.enabled=true
구글 크롬 웹 스토어에서 LiveReload 프로그램 설치
모든 사이트에서 적용이 가능하도록 옵션을 선택
Thymeleaf의 캐싱 기능을 false로 설정하겠습니다.
spring.thymeleaf.cache = false