[Springboot] 스프링부트 2.7 이상 QueryDsl build.gradle 설정

728x90

[Springboot] 스프링부트 2.7 이상 QueryDsl build.gradle 설정


필요한 부분만 작성했습니다.

buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}
plugins {
    id 'java'
    id 'war'
    id 'org.springframework.boot' version '2.7.13'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}

group = 'org.zerock'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '11'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

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

}

tasks.named('test') {
    useJUnitPlatform()
}

def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}

sourceSets {
    main.java.srcDir querydslDir
}

configurations {
    querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

이후, build.gradle의 compileQuerydsl을 빌드시켜서 에러가 발생하지 않으면 됩니다. 정상적으로 동작한다면 build 폴더 안에 다음과 같은 구조가 생성됩니다.

entity내의 파일들은 'Q'로 시작하고 그 이후는 엔티티 클래스에서 사전에 설정했던 이름과 동일하게 만들어집니다.

 

원인

Springboot 2.6부터는 QueryDsl 5.0이상을 지원합니다.

또한 아래 사항들을 체크해야 합니다.

 

1. PageableExecutionUtils 클래스의 사용 패키지 위치 변경: org.springframework.data.support.PageableExecutionUtils

 

2. fetchResult(), fetchCount()가 Deprecated됨.count 쿼리의 경우, 다음과 같이 별도로 작성해야한다고 합니다.

@Test
  public void count() {
      Long totalCount = queryFactory
              //.select(Wildcard.count) //select count(*)
              .select(member.count()) //select count(member.id)
              .from(member)
              .fetchOne();
      System.out.println("totalCount = " + totalCount);
}

 

728x90