๋ฌธ์
ํ์ฌ ํ๋ก์ ํธ๋ 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 |
๋๊ธ