QueryDSL
은 HQL(Hibernate Query Language) 쿼리를 타입에 맞게 생성 및 관리할 수 있도록 도와주는 역할을 한다. SQL을 자바 코드처럼 작성할 수 있도록 해 준다.
아쉽게도 QueryDSL
은 Spring Initializr
페이지에서는 추가할 수 없고, 직접 설치해줘야 하는데 이 때 gradle
플러그인으로 설치하는 간단한 방법은 추천하지 않는다.
QueryDSL gradle plugin 해당 플러그인인데, 스프링 1 버전때부터 활발히 사용되어 오는 아주 유용한 플러그인이지만, github 주소를 가보면 업데이트 된 지 너무 오래된 플러그인이라서 추천하지 않는다.
// queryDSL 설정
// collections는 그렇게 중요한 부분은 아니고 jpa,core,apt 부분은 중요한 설정이다
implementation "com.querydsl:querydsl-jpa"
implementation "com.querydsl:querydsl-core"
implementation "com.querydsl:querydsl-collections"
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
// querydsl 사용하다 보면 나오는 에러 메시지 대응하는 설정
// java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응코드
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
// java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응코드
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// Querydsl 설정부
// QClass가 빌드 디렉토리에 들어가는데 원하는 위치에 꺼내기 위해서
// 꺼내는 이유는 Gradle이 탐색하는 영역과 intellij가 탐색하는 영역이 중복될 시
// 이미 찾은 클래스를 다시 찾아서 충돌이 나는 걸 방지하기 위해서
def generated = 'src/main/generated'
// 컴파일 시 querydsl QClass 파일 생성 위치를 지정
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(generated))
}
// java source set 에 querydsl QClass 위치 추가
sourceSets {
main.java.srcDirs += [ generated ]
}
// gradle clean 시에 QClass 디렉토리 삭제
clean {
delete file(generated)
}
해당 설정 내용은 Spring Boot 3.0 이상부터 수정되었습니다