jiny

[Data jpa] Querydsl 적용하기 본문

Querydsl

[Data jpa] Querydsl 적용하기

ongjiny 2023. 3. 13. 11:58

spring boot 2.7.7 사용 , java 11  ( 스프링 부트 버전이 3.0 이상일 경우 java 18 선택 )

build.gradle 파일에 아래처럼 등록합니다

 

plugins 영역에 추가

id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'

 

dependencies 영역에 추가

//querydsl 추가
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
implementation "com.querydsl:querydsl-apt:${queryDslVersion}"

 

빈부분에 추가

buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}
//querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"

querydsl {
   jpa = true
   querydslSourcesDir = querydslDir
}

sourceSets {
   main.java.srcDir querydslDir
}

configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
   querydsl.extendsFrom compileClasspath
}


compileQuerydsl {
   options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝

 

 

테스트하기

 

main -> java -> 자신의 패키지 아래에 

Hello class 파일 생성 

 

인텔리 J 우측 상단 Gradle 탭 클릭 후 compileQuerydsl 우측 클릭 후

Run 실행을 하면 Hello 파일을 통해 Q타입의 파일이 생성된다

 

build > generated > 내부에 QHello 파일 생성 확인

Q타입 파일을 이용하여 query 구문을 사용할 수 있다

 

 

ctrl + shift + T 를 클릭하여 테스트 파일 생성

1. 영속성 컨텍스트에 hello 저장

2. JPAQueryFactory 는 EntityManager를 주입받아 사용된다

3. build 폴더 내부에 생성된 QHello 를 가져온다

    QHello("별칭") 생성자에 별칭을 넣거나, QHello 안의 static 객체인 QHello.hello 를 불러온다

    별칭을 m으로 설정시 querydsl 이 jpql로 변환되어 실행될 때 select m from member m 으로 실행

4. JPAQueryFactory 를 통해 Q타입 객체에 대해서 querydsl 전용 query를 실행한다

5. 저장한 엔티티와 slect 로 불러온 엔티티가 같다