본문 바로가기
관리자

Programming-[CrossPlatform]/Kotlin

[TIL] 코틀린 gradle querydsl 설정

728x90
반응형

문제

Querydsl에서 참조로하는 Q객체를 만들려고했는데 에러가 떴다.

 

해결방법

build.gradle.kts 파일에 가서 다음처럼 설정한다.

plugins {
    id("org.springframework.boot") version "3.1.0"
    id("io.spring.dependency-management") version "1.1.0"
    kotlin("jvm") version "1.8.21"
    kotlin("plugin.spring") version "1.8.21"
    kotlin("kapt") version "1.7.10"
}

 

kapt: 스프링부트에서 롬복(lombok)을 사용하면 특정 어노테이션이 달린 클래스들을 롬복이 해석하여 소스 코드를 자동으로 생성해주듯이 코틀린에서 롬복처럼 사용하는 Annotation Processor이다. kapt를 사용하기 위해서 플러그인 선언부분에 kapt를 추가해주었다.

 

dependencies {
    // ... 스프링부트 등 기타 설정들
    implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")
    implementation("com.querydsl:querydsl-core:5.0.0")
    kapt("com.querydsl:querydsl-apt:5.0.0:jakarta")
    kapt("com.querydsl:querydsl-kotlin-codegen:5.0.0")
}

kapt를 통해 querydsl를 추가해준다.

 

 

Intellij의 경우,

gradle 탭에서 build > build를 실행해주면 된다. 혹시 생성될 파일을 

 

그럼 좌측 프로젝트 파일 리스트에서 build/generated/source/kapt/ 부분에 main, test가 생성되고 Q객체가 정상적으로 참조된다.

 

 

QueryFactory를 이용하여 ORM 구문을 작성하고 싶다면 다음과 같이 설정 파일을 추가해주면 된다.

참조: https://shanepark.tistory.com/421

 

package //{경로는 각자의 프로젝트 경로로 참조}
 
import com.querydsl.jpa.impl.JPAQueryFactory
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import javax.persistence.EntityManager
import javax.persistence.PersistenceContext
 
@Configuration
class QueryDslConfig {
 
    @PersistenceContext
    lateinit var em: EntityManager
 
    @Bean
    fun jpaQueryFactory(): JPAQueryFactory {
        return JPAQueryFactory(em)
    }
package //{경로는 각자의 프로젝트 경로로 참조}
 
import com.querydsl.jpa.impl.JPAQueryFactory
import kr.quidev.quiz.domain.entity.QQuiz
import kr.quidev.quiz.domain.entity.Quiz
import org.springframework.stereotype.Repository
 
@Repository
class QuizRepositoryCustomImpl(
    private val jpaQueryFactory: JPAQueryFactory
) : QuizRepositoryCustom {
 
    override fun getList(pageSize: Long, page: Long): List<Quiz> {
        return jpaQueryFactory.selectFrom(QQuiz.quiz)
            .limit(pageSize)
            .offset(page * pageSize)
            .fetch()
    }
}

 

728x90
반응형

'Programming-[CrossPlatform] > Kotlin' 카테고리의 다른 글

[TIL] 코틀린 문법 간단 요약  (0) 2023.06.28