반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 테스트코드책
- file not found Error
- FirebaseAnalytics
- 디자인패턴
- 전략패턴
- 리액트구글애널리틱스
- formik submitting not working
- 시스템설계방법
- awss3
- 리팩토링2판4장
- react-ga
- 시스템설계면접예시
- Git commit 합치기
- cypressBDD
- git commit 협업
- react
- 시스템설계
- git squash
- s3이미지다운로드됨
- 가상면접으로대규모시스템
- 헤드퍼스트전략패턴
- 리팩터링2판테스트
- git commit merge
- 시스템설계면접
- gitsquash
- formik react-query submitting not working
- 가상면접3장
- cypress React
- 시스템설계면접팁
- 가상면접2장
Archives
- Today
- Total
mingg IT
[Kotlin] Kotlin + Spring Boot + queryDSL 적용 본문
상황
- 검색 조건등으로 인해 동적 쿼리를 생성할 일이 생겨서 queryDSL을 적용해 보려고 한다.
build.gradle.kt
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.7.6"
id("io.spring.dependency-management") version "1.1.3"
kotlin("jvm") version "1.8.22"
kotlin("plugin.spring") version "1.8.22"
kotlin("plugin.jpa") version "1.8.22"
// 추가
kotlin("kapt") version "1.9.10"
idea
}
java {
sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
// 추가
implementation("com.querydsl:querydsl-jpa:5.0.0")
kapt("com.querydsl:querydsl-apt:5.0.0:jpa")
runtimeOnly ("com.h2database:h2")
runtimeOnly ("org.postgresql:postgresql")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
jvmTarget = "17"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
tasks.getByName<Jar>("jar") {
enabled = false
}
// 추가
idea {
module {
val kaptMain = file("build/generated/source/kapt/main")
sourceDirs.add(kaptMain)
generatedSourceDirs.add(kaptMain)
}
}
JpaQueryFactoryConfig.kt
@Configuration
class JpaQueryFactoryConfig {
@PersistenceContext
private lateinit var entityManager: EntityManager
@Bean
fun jpaQueryFactory() =
JPAQueryFactory(entityManager)
}
config 폴더 내 생성 해준다.
QClass 파일 생성
./gradlew clean compileKotlin

지정한 폴더 경로로 QClass 들이 생성된 것을 확인할 수 있다.
사용예시
QClass 들이 생성되고나면 QArticle 등 import가 가능해진다.
@Service
class ArticleService (
private val articleRepository: ArticleRepository,
private val queryFactory: JPAQueryFactory
) {
fun searchArticle(articleSearchDTO: ArticleSearchDTO?): List<Article> {
val qArticle = QArticle.article
val query = queryFactory.selectFrom(qArticle)
if (articleSearchDTO != null) {
if (!articleSearchDTO.search.isNullOrBlank()) {
query.where(qArticle.searchKeyword.contains(articleSearchDTO.search))
}
}
return query.fetch()
}
}
queryFactory를 이용하여 search에 값이 들어올 경우에는 searchKeyword 컬럼에서 읽어오고, 없을경우엔 모든 artlcie을 읽어오도록 구현했다.
다음에도 사용할 일이 있을경우, 세팅하는데 참고하려고 작성해둔다.
Reference
kotlin gradle에서 queryDSL 설정하기
kotlin gradle에서 QueryDSL을 설정했던 내용을 기록으로 남깁니다.
v3.leedo.me
'BackEnd' 카테고리의 다른 글
Comments