본문 바로가기
Tech/Spring | Spring Boot

[Spring Boot] Querydsl 을 이용한 동적 쿼리 처리 하기

by 싱브이 2024. 4. 9.
728x90
반응형

Springboot 프로젝트로 Spring Data JPA를 사용하는데 간단한 crud가 아니라 쿼리 메소드가 필요할 때 JPA나 JPQL을 이용하면 편리하긴 하지만, annotation을 이용해서 해야하기때문에 고정되어 있다.

JPQL은 정적으로 고정되어야 한다. 근데 이게 복잡한 쿼리문을 작성하게 된다면 복잡해진다.

예를들어, 나의 경우 검색기능을 넣는데 단일 조건이 아닌, 제목과 내용 or 제목과 작성자와 같이 복합적인 조건을 처리하는 검색기능을 넣으려고 할 때 모든 경우의 수를 처리하는 메소드를 작성하기 쫌 어려웠다!

아무튼 이 문제를 해결하기 위해 Querydsl 을 도입!

 

Querydsl 이란?

Querydsl은 JPA의 구현체인 Hibernate 프레임워크가 사용하는 HQL(Hibernate Query Language)을 동적으로 생성할 수 있는 프레임워크로 JPA를 지원한다. 자바 코드를 이용해서 쿼리를 작성할 수 있다!

Q 도메인 : Querydsl의 설정을 통해 기존의 엔티티 클래스를 Querydsl에서 사용하기 위해 별도의 코드로 생성되는 클래스

 

 

사용해보기

 

1. 라이브러리 추가

[build.gradle]

buildscript{
    ext{
        queryDslversion = "5.0.0"
    }
}

. . .


dependencies {
	. . . 
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"

    annotationProcessor(

            "jakarta.persistence:jakarta.persistence-api",

            "jakarta.annotation:jakarta.annotation-api",

            "com.querydsl:querydsl-apt:${queryDslVersion}:jpa")

}

. . .

sourceSets {
    main {
        java {
            srcDirs = ["$projectDir/src/main/java", "$projectDir/build/generated"]
        }
    }
}

3부분을 추가해야한다.

buildscript, depedencies, sourceSets !!

*참고 : 스프링부트 3.x.x 는 jakarta / 스프링부트 2.x.x는 javax  !!! 

 

 

2. 설정 확인

먼저 안전하게 하기 위해서 gradle > build > clean을 실행한다.

* clean을 하게 되면 build 파일이 지워짐!

 

그리고 other > compileJava를 실행한다.

 

compileJava를 실행했을 때 잘 끝났으면 아래와 같이 뜬다!

 

* 설정이 제대로 되지 않았다면 ?

1. 다시 clean -> compilJava 실행해보기

2. build.gradle에서 설정이 잘못된 것이니 다시 확인하기!

 

 

아무튼 잘 실행되었으면 이렇게 Q도메인 클래스가 생성되는 것을 볼 수 있다!!!!!!

728x90
반응형

댓글