Q클래스(Q-Type)

김정현·2025년 3월 22일
0

Spring Boot

목록 보기
8/8

Q클래스

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 폴더에 생성된다.

사용법

특정 필드로 조회 (eq 사용)

QWishList wishList = QWishList.wishList;
WishList result = queryFactory
    .selectFrom(wishList)
    .where(wishList.email.eq("user@example.com"))
    .fetchOne();

다중 조건 조회 (BooleanBuilder 활용)

BooleanBuilder builder = new BooleanBuilder();
builder.and(wishList.email.eq("user@example.com"));
builder.and(wishList.seq.eq(123L));

List<WishList> results = repository.findAll(builder);

정렬해서 조회 (Sort.by 활용)

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()
}

0개의 댓글