Spring Boot | Querydsl 추가 (Gradle 7.x)
📌참고!!!! [gradle] 그레이들 Annotation processor 와 Querydsl
Querydsl은 JPQL 빌더 오픈소스 프레임워크다.
일단 Querydsl
을 사용하기 위해 라이브러리를 추가해야 한다.
SpringDataJPA도 추가되어 있어야 한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// Querydsl 추가 시작
implementation 'com.querydsl:querydsl-jpa'
}
이렇게만 하면 QuerydslRepositorySupport
나 QueryDslPredicateExecutor
는 사용할 수 있지만, Qclass가 생성되지 않는다.querydsl-apt
가 쿼리 타입(Q)를 생성할 때 필요한 라이브러리인데, 이 라이브러리는 annotationProcessor
를 이용해 추가한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// Querydsl 추가 시작
implementation 'com.querydsl:querydsl-jpa'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
}
그리고 프로젝트를 실행했을 때 java.lang.NoClassDefFoundError
가 발생하면, 아래와 같이 annotationProcessor를 더 추가한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// Querydsl 추가 시작
implementation 'com.querydsl:querydsl-jpa'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
// Querydsl 추가 끝
}
이제 프로젝트를 실행하면, 엔티티 클래스 앞에 Q가 붙은 이름의 쿼리 타입들이 생성된다.
이 쿼리 타입들이 생성되는 위치는 인텔리제이를 사용하는 경우
Preferences > Build, Execution, Deployment > Build Tools > Gradle의 경로로 갔을 때, Build and run using의 값에 따라 다르다.
IntelliJ IDEA를 사용하는 경우
src/main/generated
경로로 생성된다.
엔티티 위치가 변경되거나 삭제될 경우 기존 쿼리 타입(Q클래스)를 삭제해주어야 한다!
이 경우, 보통build.gradle
에task
를 작성하여 해당 클래스들을 삭제한다.
task를 작성하는 방법은 이 글 상단의 참고 링크로...
Gradle을 사용하는 경우
build/generated/sources/annotationProcessor/java/main
경로에 생성된다.
둘 중 어느 방법을 사용해도 상관 없지만, 설정에 따라 쿼리 타입 생성 경로가 달라짐에 주의하면 된다.
gradle clean
으로 쿼리 타입을 삭제한다!
IntelliJ IDEA를 사용하는 게 좀 더 빠르다고 함..