728x90
- 쿼리를 문자가 아닌 코드로 작성해도, 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발할 수 있는 프로젝트가 바로 QueryDSL이다.
- QueryDSL도 Criteria처럼 JPQL 빌더 역할을 하는데 JPA Criteria를 대체할 수 있다.
QueryDSL 설정
<plugins>
....
<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>
....
<plugins>
<!-- QueryDSL APT Config -->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
<scope>provided</scope>
</dependency>
<!-- QueryDSL JPA Config -->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>
- querydsl-jpa: QueryDSL JPA 라이브러리
- querydsl-apt: 쿼리 타입(Q)을 생성할 때 필요한 라이브러리
쿼리 작성
public void queryDSL() {
EntityManager em = emf.createEntityManager();
JPAQuery query = new JPAQuery(em);
QMember qMember = new QMember("m"); //생성되는 JPQL의 별칭이 m
List<Member> members =
query.from(qMember)
.where(qMember.name.eq("회원1"))
.order(qMember.name.desc())
.list(qMember);
}
- QueryDSL을 사용하려면 우선 com.mysema.query.jpa.impl.JPAQuery 객체를 생성해야 하는데 이때 엔티티 매니저를 생성자에 넘겨준다.
- 다음으로 사용할 쿼리 타입(Q)을 생성하는데 생성자에는 별칭을 주면 된다.
- 이 별칭을 JPQL에서 별칭으로 사용한다.
- 위의 코드로 실행된 최종 JPQL은 다음과 같다.
select m from Member m
where m.name = ?1
order by m.name desc
출처: 자바 ORM 표준 JPA 프로그래밍
728x90
'JPA' 카테고리의 다른 글
벌크 연산(부제 - DB에 직접 쿼리) (0) | 2022.06.18 |
---|---|
컬렉션 엔티티 조회 + 페이징을 함께 해결 (feat. default_batch_fetch_size) (0) | 2022.06.16 |
Criteria 기초(feat. JPQL의 빌더 클래스) (0) | 2022.06.16 |
페치 조인과 일반 조인의 차이(feat. 연관된 엔티티 함께 조회) (0) | 2022.06.15 |
페이징 API (0) | 2022.06.15 |