Q클래스는 QueryDSL이 엔터티를 기반으로 자동 생성하는 클래스
Q클래스를 사용하면 엔터티의 필드를 타입 안정성(Type Safety)을 유지하면서 쿼리를 작성할 수 있다.
의존성에 추가해준다.
public class QWishList extends EntityPathBase<WishList> {
public final StringPath email = createString("email");
public final NumberPath<Long> seq = createNumber("seq", Long.class);
public final DateTimePath<LocalDateTime> createdAt = createDateTime("createdAt", LocalDateTime.class);
}
위처럼 WishList 엔터티를 기반으로 QWishList 클래스가 src/main/generated 폴더에 생성된다.
QWishList wishList = QWishList.wishList;
WishList result = queryFactory
.selectFrom(wishList)
.where(wishList.email.eq("user@example.com"))
.fetchOne();
BooleanBuilder builder = new BooleanBuilder();
builder.and(wishList.email.eq("user@example.com"));
builder.and(wishList.seq.eq(123L));
List<WishList> results = repository.findAll(builder);
List<WishList> results = repository.findAll(
wishList.email.eq("user@example.com"),
Sort.by(Sort.Direction.DESC, "createdAt")
);
또한, build.gradle 에서 QClass에 관한 설정을 할 수 있다.
// JUnit 5 (JUnit Platform) 사용 설정
tasks.named('test') {
useJUnitPlatform()
}
// QueryDSL 자동 생성된 파일이 저장될 디렉토리 지정
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
sourceSets {
// QueryDSL이 생성한 Q클래스를 소스 코드로 인식하도록 추가
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
// Java 컴파일 시, QueryDSL이 생성한 Q클래스도 함께 컴파일되도록 설정
options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}
clean.doLast {
// 'gradle clean' 실행 시 QueryDSL이 생성한 Q클래스 삭제 (최신 상태 유지)
file(querydslDir).deleteDir()
}