728x90
JPA Querydsl
Querydsl은 소스코드로 SQL문을 문자열이 아닌 코드로 작성하기 때문에 컴파일러의 도움을 받을 수 있다.
장점
- 고정된 SQL문이 아닌 조건에 맞게 동적으로 쿼리 생성 가능
- 비슷한 쿼리를 재사용하며 제약 조건 조립 및 가독성 향상
- 자바 소스로 작성하여 컴파일 시점에 오류 발견 가능
- IDE의 자동완성 기능을 이용할 수 있어 생산성 향상 가능
Querydsl 설정
pom.xml
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>5.0.0</version>
</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>
메이븐 빌드
- <Maven>의 <Reload All Maven Projects>를 클릭하여 라이브러리를 다운로드한다.
- 과정 수행 후 Maven compile을 더블클릭하여 컴파일한다.
빌드가 완료되면 아래와 같이 target/generated-source 폴더에 QItem 클래스가 생성되었다.
예제
JPAQueryFactory를 이용한 상품 조회 예제
...
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.shop.entity.QItem;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@SpringBootTest
@TestPropertySource(locations = "classpath:application-test.properties")
class ItemRepositoryTest {
@PersistenceContext
EntityManager em;
...
@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());
}
}
}
JPAQuery에 추가한 판매상태 코드와 상품 상세 설명이 where 조건에 추가, 상품의 가격이 내림차순으로 정렬돼 데이터를 조회합니다.
자바 코드를 이용하여 고정된 쿼리문이 아닌 비즈니스 로직에 따라서 동적으로 쿼리문을 생성할 수 있다.
반응형
'프로젝트 > Archive' 카테고리의 다른 글
[01] 회원가입 기능 만들기 - 0 (1) | 2022.12.21 |
---|---|
[스프링 부트 쇼핑몰 프로젝트 with jpa] Thymeleaf 소개 (0) | 2022.10.06 |
[스프링 부트 쇼핑몰 프로젝트 with jpa] @Query 어노테이션 (0) | 2022.09.21 |
[스프링 부트 쇼핑몰 프로젝트 with jpa] 쿼리메소드 (0) | 2022.09.20 |
[스프링 부트 쇼핑몰 프로젝트 with jpa] Repository 설계 (0) | 2022.09.20 |