Querydsl 설정

dongbin_Shin·2021년 10월 21일
0

QueryDsl

목록 보기
1/4
post-thumbnail

우리는 Spring Data Jpa를 이용해 여러 방법으로 쉽게 쿼리를 만들고 작동시킬 수 있었다.
쿼리가 복잡해질 경우 @Query와 같은 어노테이션으로 쿼리를 직접 작성할 수 있다.
하지만 이렇게 되면 쿼리에 문제가 있는지 여부를 런타임시에 알 수밖에 없다.
이런 문제를 극복하기 위해 쿼리를 코드로 작성하는 QueryDsl을 이용할 수 있다.
QueryDsl은 spring data jpa와 달리 코드로 쿼리를 짜기 때문에 컴파일 시점에 쿼리에 문제가 있는지 여부를 알 수 있다.

Querydsl 설정

querydsl은 스프링 스타터에서 추가할 수 없기 때문에 별도로 build.gradle에 관련 라이브러리를 넣어주어야 한다.

plugins {
    ...
    // querydsl
    id 'com.ewerk.gradle.plugins.querydsl' version "1.0.10"
}

...

dependencies {
    ...
    implementation 'com.querydsl:querydsl-jpa'
}

// 쿼리 dsl 설정 시작
def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

먼저 plugins에 querydsl 버전을 설정해주고 dependencies에 라이브러리를 추가해준다.
그 후 querydsl 관련 세부 설정을 적어줘야 하는데 대략적인 내용은 이렇다.

  • querydsl은 엔티티를 기반으로 Qclass를 자동으로 만들어 사용한다
  • Qclass를 만들어 줄 경로를 def querydslDir = "$buildDir/generated/querydsl"에 설정해준다.

기본 예제

먼저 테스트를 할 엔티티를 하나 만든다.

이 엔티티를 Qclass로 만들기 위해 querydsl을 컴파일해야 하는데 두가지 방법이 있다.

  • 오른쪽 탭 중 gradle에서 querydsl->Tasks -> others -> complieQuerydsl을 더블클릭
  • 터미널에서 ./gradlew compileQuerydsl 입력

빌드를 완료하면 전에 설정해 둔 경로 아래에 엔티티 경로와 같은 경로로 Qclass가 생성된다.


여기서 Qclass는 버전에 따라 세부 내용이 바뀔 수 있기 때문에 .gitignore에 추가하는 방법 등으로 커밋 내용에서 제외해야 한다.


위와 같이 간단한 테스트를 작성해 보았다.

  • em.persist로 member 저장
  • 쿼리를 작성하기 위한 JPAQueryFactoryEntityManager 전달
  • QMember 생성 시 alias를 m으로 설정
  • QMember에서 하나 가져오는 쿼리 작성

결과를 보면 저장한 member와 같은 결과가 나온 것을 볼 수 있다.
실제 쿼리는 아래와 같다.

라이브러리 살펴보기

querydsl 라이브러리를 추가하면 querydsl-jpaquerydsl-apt가 추가된다.

  • querydsl-apt: Qclass를 만드는 데에 사용
  • querydsl-jpa: 쿼리를 작성하는데에 사용
profile
멋있는 백엔드 개발자

0개의 댓글