Spring Boot/QueryDSL

Spring Boot QueryDSL 개념

최-코드 2024. 8. 10. 22:39

QueryDSL : DSL은 Domain Specific Language의 약자로 특정 영역에 특화된 언어를 말한다. 즉 QueryDSL은 쿼리 생성에 특화된 프레임워크를 의미한다.

 

QueryDSL 특징 

  • QueryDSL은 JPQL을 코드화 한 것이기 때문에 결과적으로 JPQL로 실행이 된다. 따라서 JPQL을 사용하든 QueryDSL을 사용하든 성능에서 차이가 없다.
  • 1번에 이어서 결국 jpql이기 때문에 from 절에 서브쿼리를 사용할 수 없다. 즉, JPQL에서 안 되는 것은 QueryDSL에서도 안 된다고 보면 된다.
  • 쿼리를 자바 코드로 작성할 수 있다. 이는 QClass를 통해 이루어진다.
    • 문법 오류를 컴파일 시점에 잡을 수 있음
    • 코드의 자동완성 기능 또한 이용할 수 있음
    • 특정 부분을 함수로 빼서 재사용성 높일 수 있다.
  • 동적 쿼리 문제를 해결할 수 있다.
  • QClass 파일들에 대해 gitignore해줘야 한다. src/main/generated에 존재한다.

cf)QClass는 엔티티에 대해 메타 데이터를 가지고 있는 클래스를 말한다. 

 

QueryDSL buld.gradle 설정

dependencies {
    //quertDSL
    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"
}

//gradle clean 시 QClass 삭제
clean {
    delete file('src/main/generated')
}