[QueryDSL이란?]
QueryDSL은 하이버네이트 쿼리 (HQL : Hibernate Query Language)의 쿼리를
타입에 안전하게 생성 및 관리 해주는 언어이다.
즉 스프링에서는 동적 쿼리를 작성할 때 정말 까다롭지 않을 수 없다.
동적쿼리를 짜기 위해서는 더러운 코드가 작성될 가능성이 크며
코드가 난잡해 질 가능성이 크다.
하지만 QueryDSL을 사용한다면 이 동적쿼리를 깔끔하게 해결할 수 있다는 장점이 있다.
QueryDSL의 장점 은 크게 몇가지 있다.
▶ 쿼리를 Java로 type - safe 하게 개발 할 수 있게 하는 프레임워크이다.
▶주로 Jpa 쿼리 (JPAL)에 사용된다.
▶ 복잡한 동적쿼리를 쉽게 작성할 수 있게 한다.
[QueryDSL의 동작 방식]
QueryDSL은 JPA와 함께 쓰는 프레임워크라 할 수 있는데
그 이유는 Jpa가 관리하는 엔티티 객체를 APT가 읽어서 쿼리용 객체를 만들어준다.
예를들어
Item이라는 Jpa 엔티티 객체가 있다고 한다면 QueryDsl을 사용한다면 이 객체를
QItem이라는 쿼리용 객체를 따로 만들어준다.
[QueryDsl 사용방법]
QueryDsl은 사용방법은 크게 어렵지 않지만 설정이 조금 어렵다.
한번 설정방법을 보도록 하자.
dependencies {
//QueryDsl의존성 주입
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
}
일단 dependencies에 이러한 의존성을 넣어야 한다.
또한 QueryDSL의 경우 옵션을 몇개 넣어야 하는데
//Gradle에서 사용할 추가적인 task
//Q객체를 넣기위한 경로
def querydslDir = "$buildDir/generated/querydsl"
//querydsl 추가 시작
querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
//querydsl 추가 끝
디펜던시 밑에 이 옵션을 넣도록 하자.
다 넣었으면 맨위부분에
buildscript {
//Add
ext {
queryDslVersion = "5.0.0"
}
}
이러한 코드를 추가하면 QueryDSL의 의존성 추가는 끝이다.
사진으로 본다면 이러한 느낌일 것 이다.
[주의]
QueryDsl은 스프링부트의 버전마다 설정방법이 다르다.
그렇기 때문에 이 의존성 추가 부분은 스프링 3.0미만 버전까지 적용되는 것 이다.
만약 3.0이상의 스프링부트를 사용한다면 QueryDsl의 설정방법이 다르기 때문에
오류가 뜰 수 있다.
[QueryDSL]의 사용
QueryDSL의 의존성 주입이 끝난다면 여기서
Build설정에 따라 설정하는 방법이 다르다.
우리는 QueryDSL을 의존성을 주입받았기 때문에
이제는 APT로 Q객체를 만들어줘야 한다.
필자의 경우는 이미 QueryDsl을 쓰고있기 때문에 Q객체가 있지만
설정을 아직 덜 마친 사람은 이 Q객체가 존재하지 않는다.
그렇기때문에 이 객체를 만들어줄려면 추가적인 설정이 더 필요하다.
[Build가 Gradle일 경우]
여는 방법은 컨트롤 + shift + S로 열면된다.
만약 이 Build가 Gradle일 경우는
Ctrl + E 누른 후
Gradle 클릭을 한다.
Gradle을 누르면 이러한 화면이 나올텐데
Clean 누른 후 -> Compile.java를 클릭하면 컴파일이 된 후
이러한 Query객체가 생길 것 이다.
만약 생기지 않는다면 설정을 잘못한 것 이기에 꼼꼼히 해보길 바란다.
[인텔리제이로 실행할 경우]
인텔리제이로 통해 실행할 경우 그냥
프로젝트로 빌드하거나 IDE를 빌드 시켜주면 쿼리 객체가 생성될 것 이다.
이렇게 Q객체가 생성되었다면 QueryDsl을 사용할 준비가 완료된 것 이다.
QueryDSL의 사용방법이 궁금하다면 여기를 참고하면 될 것 이다.
'[스프링 DB] > QueryDSL' 카테고리의 다른 글
[스프링] booleanExpresstion 사용법 QueryDSL란 무엇인가? (0) | 2023.06.20 |
---|