๋ฌธ์

ํ์ฌ ํ๋ก์ ํธ๋ spring-boot-2.7.2๋ฅผ ์ฌ์ฉ ์ค์ด๋ฉฐ, Querydsl์ ์ฌ์ฉํ๊ธฐ ์ํด build.gradle์ ์์กด์ฑ์ ์ถ๊ฐํ๋ ๊ณผ์ ์์ ์์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' // querydsl ์ถ๊ฐ id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { // querydsl ์ถ๊ฐ implementation 'com.querydsl:querydsl-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } } test { useJUnitPlatform() } // ------------querydsl ์ถ๊ฐ ์์ ------------ def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } // ------------querydsl ์ถ๊ฐ ๋------------
Querydsl์ ์ถ๊ฐํ๊ธฐ ์ํด ์ค์ ํ build.gradle ์ฝ๋๋ ์์ ๊ฐ์ต๋๋ค.
ํด๊ฒฐ
// ------------ ์ฌ๊ธฐ ์ถ๊ฐ ------------ buildscript { ext { queryDslVersion = "5.0.0" } } // ------------------------ plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' //---------------์ถ๊ฐ--------------------- id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" //--------------------------------------- id 'java' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' // ------------ ์ฌ๊ธฐ ๋ณ๊ฒฝ ------------ implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" implementation "com.querydsl:querydsl-apt:${queryDslVersion}" // ------------------------ runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } // ------------ ์ฌ๊ธฐ ๋ณ๊ฒฝ ------------ configurations { compileOnly { extendsFrom annotationProcessor } querydsl.extendsFrom compileClasspath } // ------------------------
build.gradle์ ์์ ๊ฐ์ด ๋ณ๊ฒฝํด ์ค๋๋ค. ํนํ dependency ๋ถ๋ถ์ querydsl-jpa , querydsl-apt๋ฅผ ์ถ๊ฐํ๊ณ ๋ฒ์ ์ ๋ช ์ํด ์ฃผ์ด์ผ ํฉ๋๋ค. (์ ์ฝ๋์์๋ dependency querydsl-jpa , querydsl-apt์ ์ถ๊ฐํ๊ณ ์ต ์๋จ์ ๋ฒ์ ์ ๋ช ์ํ์ต๋๋ค.)
ํ์ธ

์ ์ด๋ฏธ์ง ์ฒ๋ผ inteliJ์ฐ์ธก์ Gradle -> querydsl -> other -> compileQuerydsl์ ๋๋ธ ํด๋ฆญํฉ๋๋ค.

์์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋์๋ค๋ฉด ์ฑ๊ณต์ ๋๋ค!
์์ธ
Srping Boot 2.6 ๋ฒ์ ์ด์๋ถํฐ๋ Querydsl 5.0์ ์ฌ์ฉํด์ผ ํ๋ฉฐ ์๋์ ๊ฐ์ ๋ถ๋ถ์ ํ์ธํด์ผ ํฉ๋๋ค.
- build.gradle ์ค์ ๋ณ๊ฒฝ (ํ์)
- PageableExecutionUtils Deprecated(ํฅํ ๋ฏธ์ง์) ํจํค์ง ๋ณ๊ฒฝ (์ฌ์ฉํ๋ค๋ฉด)
- Querydsl fetchResults() , fetchCount() Deprecated(ํฅํ ๋ฏธ์ง์) (์ฌ์ฉํ๋ค๋ฉด)
PageableExecutionUtils ํจํค์ง ๋ณ๊ฒฝ
PageableExecutionUtils ํด๋์ค ์ฌ์ฉ ํจํค์ง ๋ณ๊ฒฝ
PageableExecutionUtils ํด๋์ค ์ฌ์ฉ ํจํค์ง ์์น๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ธฐ์กด ์์น๋ฅผ ์ ๊ท ์์น๋ก ๋ณ๊ฒฝํด์ฃผ์๋ฉด ๋ฌธ์ ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธฐ์กด: org.springframework.data.repository.support.PageableExecutionUtils
์ ๊ท: org.springframework.data.support.PageableExecutionUtils
Querydsl fetchResults() , fetchCount() Deprecated(ํฅํ ๋ฏธ์ง์)
Querydsl์ fetchCount() , fetchResult()๋ ๊ฐ๋ฐ์๊ฐ ์์ฑํ select ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก count์ฉ ์ฟผ๋ฆฌ๋ฅผ ๋ด๋ถ์์ ๋ง๋ค์ด์ ์คํํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๊ธฐ๋ฅ์ select ๊ตฌ๋ฌธ์ ๋จ์ํ count ์ฒ๋ฆฌํ๋ ์ฉ๋๋ก ๋ฐ๊พธ๋ ์ ๋์
๋๋ค. ๋ฐ๋ผ์ ๋จ์ํ ์ฟผ๋ฆฌ์์๋ ์ ๋์ํ์ง๋ง, ๋ณต์กํ ์ฟผ๋ฆฌ์์๋ ์ ๋๋ก ๋์ํ์ง ์์ผ๋ฉฐ Querydsl์ ํฅํ fetchCount() , fetchResult()๋ฅผ ์ง์ํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ฐ๋ผ์ 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); }
์ฐธ๊ณ
'BackEnd๐ฑ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JUnit5 ์์ธํ ์์๋ณด๊ธฐ (3) | 2022.10.02 |
---|---|
[Spring] StringUtils ์ ์ฉํ ๋ฉ์๋ ์ ๋ฆฌ (0) | 2022.08.31 |
AssertJ ํต์ฌ ๊ธฐ๋ฅ ์์๋ณด๊ธฐ (1) | 2022.08.08 |
[Spring] [BaseTimeEntity, JPA Auditing]์ ํตํ ์์ฑ์๊ฐ/์์ ์๊ฐ ์๋ํ (1) | 2022.05.22 |
[Spring] @Valid, @ControllerAdvice, @Exception์ ์ด์ฉํ ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ฐ ์ฒ๋ฆฌ (0) | 2022.05.20 |
[Spring] nested exception is java.lang.NullPointerException (0) | 2022.05.15 |
๋๊ธ