Open jowoohyeong opened 1 year ago
Querydsl에서는 엔티티로 설정된 클래스에 Q모델이라는 쿼리타입 클래스를 미리 생성해놓고 메타데이터로 사용하여 쿼리를 메소드 기반으로 작성한다. 쉽게 말하자면 querydsl 프레임워크를 사용하면서 쿼리문을 작성하려면 Q타입 클래스가 필요하다.
QMember m1 = new QMember("m")
Member member1 = queryFactory
.selectFrom(m1)
.where(m1.name.eq("member1"))
.fetchOne();
QMember m2 = QMember.member;
Member member2 = queryFactory
.selectFrom(m2)
.where(m2.name.eq("member1"))
.fetchOne();
---------------------------------------------------
import static com.tigen.survey.address.QMember.member;
...
Member member3 = queryFactory
.selectFrom(member)
.where(member.name.eq("member1"))
.fetchOne();
Q클래스란? Q-Class의 생성은 컴파일 시점이다. JPAAnnotationProcessor 컴파일 시점에 작동을 하는데, 해당 APT가 @Entity와 @Embeddable과 같은 어노테이션을 찾는다. 그 후 해당 내용들을 분석하여 Q-Class들을 생성하게 된다. 이때 APT는 Q-Class을 생성할 때 Entity-Class와 최대한 비슷한 패키지 구조를 유지하려고 한다.
QueryDSL은 Q-Clas을 만들어서 쓰는것일까? Q-Class(Static Class)은 QueryDSL만 생성해서 사용하는 것이 아니라 QueryDSL과 비슷한 Crieteria도 Static Meta Class를 만들어서 사용을 한다. 이런 Static Meta Class ( Q-class ) 를 만드는 기능은 놀랍게도 JPA에서 지원하고 있는 기능이였다.