스프링부트 2버전과 3버전은 Querydsl 설정하는 방법이 다르다. 이중에서 이젠 스프링부트 3버전만 제작하는게 가능해졌으므로 스프링부트 3버전의 Querydsl 설정법만 작성해보았다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.3'
id 'io.spring.dependency-management' version '1.1.0'
// Querydsl 플러그인 사용 X
// id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}
group = 'sample'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Spring boot 3.x이상에서 QueryDsl 패키지를 정의하는 방법
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
tasks.named('test') {
useJUnitPlatform()
}
// === QueryDsl 빌드 옵션 (선택) ===
def querydslDir = "$buildDir/generated/querydsl"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.generatedSourceOutputDirectory = file(querydslDir)
}
clean.doLast {
file(querydslDir).deleteDir()
}
이렇게 //주석처리된 부분 아랫내용들을 프로젝트 build.gradle에 붙여서 사용하면 된다.
Querydsl은 apt-maven-plugin을 사용해서 컴파일 과정에서 Q-Type 클래스를 생성한다. 따라서 querydsl-apt jakarta 버전에서는 apt-maven-plugin이 필요없다.
package study.querydsl.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter @Setter
public class Hello {
@Id @GeneratedValue
private Long id;
}
여기서 주의할 점은 코드에서 보여지는 것처럼 javax의 패키지->jakarta 패키지로 설정해서 코드를 작성해야한다는 점이다.
원래는 스프링부트 2버전이었다면 Gradle-other-compileQuerydsl을 실행해서 Q타입의 엔티티가 생성되게해야했다.
하지만 보다시피 3버전에서는 compileQuerydsl이 없다. 스프링이 알아서 해주기 때문에 우리는 main()만 실행해주면
이렇게 똑같은 패키지 경로에 Q타입의 Hello가 생성된걸 확인할 수 있다.