STUDY/Spring

Spring Boot | Querydsl 추가 (Gradle 7.x)

개미606 2021. 8. 10. 14:07

📌참고!!!! [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'
}

이렇게만 하면 QuerydslRepositorySupportQueryDslPredicateExecutor는 사용할 수 있지만, 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.gradletask를 작성하여 해당 클래스들을 삭제한다.
task를 작성하는 방법은 이 글 상단의 참고 링크로...

Gradle을 사용하는 경우

build/generated/sources/annotationProcessor/java/main경로에 생성된다.


gradle clean으로 쿼리 타입을 삭제한다!


둘 중 어느 방법을 사용해도 상관 없지만, 설정에 따라 쿼리 타입 생성 경로가 달라짐에 주의하면 된다.

IntelliJ IDEA를 사용하는 게 좀 더 빠르다고 함..