[Kotlin] SpringBoot3 + QueryDsl 설정하기

hanana·2024년 1월 16일
2

1. build.gradle.kts

plugins {
    id("org.springframework.boot") version "3.2.1"
    id("io.spring.dependency-management") version "1.1.4"
    kotlin("jvm") version "1.9.21"
    kotlin("plugin.spring") version "1.9.21"
    kotlin("plugin.jpa") version "1.9.21"
    // 추가: Kotlin annotation processing 플러그인
    kotlin("kapt") version "1.9.21"
}
    
group = "com.hana"
version = "0.0.1-SNAPSHOT"
java {
    sourceCompatibility = JavaVersion.VERSION_17
}
configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}
// 추가
val queryDslVersion: String by extra
    
    
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")
    compileOnly("org.projectlombok:lombok")
    runtimeOnly ("com.mysql:mysql-connector-j")
    annotationProcessor("org.projectlombok:lombok")
    testImplementation("org.springframework.boot:spring-boot-starter-test")

    // QueryDSL 의존성 추가
    implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
    kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
    kapt("jakarta.annotation:jakarta.annotation-api")
    kapt("jakarta.persistence:jakarta.persistence-api")
}
    

// Querydsl 설정부 추가 - start
val generated = file("src/main/generated")

// querydsl QClass 파일 생성 위치를 지정
tasks.withType<JavaCompile> {
    options.generatedSourceOutputDirectory.set(generated)
}

// kotlin source set 에 querydsl QClass 위치 추가
sourceSets {
    main {
        kotlin.srcDirs += generated
    }
}

// gradle clean 시에 QClass 디렉토리 삭제
tasks.named("clean") {
    doLast {
        generated.deleteRecursively()
    }
}


kapt {
    generateStubs = true
}

// Querydsl 설정부 추가 - end

2. QueryDslConfig

@Configuration
class QueryDslConfig(
    val em: EntityManager
) {

    @Bean
    fun queryFactory(): JPAQueryFactory {
        return JPAQueryFactory(em)
    }
}

이렇게 build.gradle을 통해 의존성을 추가한 후
@Configuration으로 설정정보를 bean으로 등록한 후
gradle 탭에서 build를 하면!!

build 패키지 안에 Q클래스가 정상적으로 생겼음을 확인 할 수 있다!

profile
성숙해지려고 노력하지 않으면 성숙하기까지 매우 많은 시간이 걸린다.

4개의 댓글

comment-user-thumbnail
2024년 4월 6일

깔끔한 정리 감사해요

1개의 답글
comment-user-thumbnail
2024년 4월 9일

이번에 첫 코프링 프젝하는데 querydsl 은 항상 사용하는 것보다 설정하는게 막막했는데 감사합니다!

1개의 답글