[QueryDSL] 스프링부트 3.x 버전에서 QueryDSL 설정하기

반응형

스프링 부트 2.x 버전 대를 쓰다가 이번에 스프링 부트 3.x 버전이 나오면서 많은 설정이 변경되었다.

이번 포스팅에서는 스프링부트 3.x 버전에서 QueryDSL을 설정하는 방법에 알아보고자 한다.

(스프링 부트 3.x버전은 자바 17만을 지원하므로 자바 17이 준비되어 있어야한다.)

 

QueryDSL을 적용하고 나면 Q타입 class라는 것이 생기는데 이 Q타입 class은 Entity 클래스를 통해 생성된다.

그리고 이 Q타입 class가 있어야 QueryDSL로 쿼리문을 작성할 수 있다.

 

그렇기 때문에 먼저 QueryDSL을 적용하기전에 Entity 객체가 준비되어 있어야한다.

나는 간단하게 Hello라는 엔티티 클래스를 만들었다.

@Entity
@Getter
@NoArgsConstructor
public class Hello {

    @Id
    @GeneratedValue
    private Long id;
}

의존성 추가

모든 준비가 되었다면 이제 QueryDSL을 추가해보자.

 

1. build.gradle의 의존성에 다음과 같이 QueryDSL 코드를 추가해준다.
dependencies {
	...

    // Querydsl 추가
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

 

2. 우측의 Gradle 클릭 후 Tasks -> build -> clean 실행

 

3. Tasks -> other -> complieJava 실행

 

4. Q 타입 클래스 생성 완료

위 과정들을 마쳤다면 프로젝트의 build 폴더안의 아래 경로에 QHello.java라는 Q타입 클래스가 생성된 것을 확인할 수 있다.

import static com.querydsl.core.types.PathMetadataFactory.*;

import com.querydsl.core.types.dsl.*;

import com.querydsl.core.types.PathMetadata;
import javax.annotation.processing.Generated;
import com.querydsl.core.types.Path;


/**
 * QHello is a Querydsl query type for Hello
 */
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QHello extends EntityPathBase<Hello> {

    private static final long serialVersionUID = 1910216155L;

    public static final QHello hello = new QHello("hello");

    public final NumberPath<Long> id = createNumber("id", Long.class);

    public QHello(String variable) {
        super(Hello.class, forVariable(variable));
    }

    public QHello(Path<? extends Hello> path) {
        super(path.getType(), path.getMetadata());
    }

    public QHello(PathMetadata metadata) {
        super(Hello.class, metadata);
    }
}

 

Entity 클래스가 추가될 경우

Entitiy 클래스가 새로 추가될 경우에는, Gradle의 Tasks -> other -> complieJava 다시 실행 하면 추가된 Entitiy들의 Q 클래스가 생성되는 것을 확인할 수 있다.