JPA

Query DSL을 사용하기 위한 설정

Happy._. 2024. 7. 3. 17:15

build.gradle.kts에 다음 의존성을 추가

plugins {
    kotlin("kapt") version "1.9.23"
}

val queryDslVersion = "5.0.0"

dependencies {
    kapt("com.querydsl:querydsl-apt:$queryDslVersion:jakarta")
    implementation("com.querydsl:querydsl-jpa:$queryDslVersion:jakarta")
}

 

kapt

  • Kotlin Annotation Processing Tool로 Annotation을 분석해서 QueryDSL에 알려주는 역할
  • Entity 같은 어노테이션이 붙은 것을 분석해줌(Java로 된 QueryDSL 측에 알려줌)

의존성 추가 후 다음을 진행

  1. [Gradle] → [Tasks] → [other] → [compileKotlin] 실행
  2. QClass 확인: [build] → [generated] → [source] → [kapt] → [main] → 각 model 패키지 내 확인

QueryDslConfig 클래스 생성

import com.querydsl.jpa.impl.JPAQueryFactory
import jakarta.persistence.EntityManager
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class QueryDslConfig {

    @Bean
    fun jpaQueryFactory(entityManager: EntityManager): JPAQueryFactory {
        return JPAQueryFactory(entityManager)
    }
}

 

CustomRepository 클래스 생성

클래스 내 메서드는 예시 코드

@Repository
class WikiHistoryCustomRepository(
    private val queryFactory: JPAQueryFactory
) {
    private val wikiHistory = QWikiHistory.wikiHistory

    fun findImageById(wikiId: Long): List<String> {
        return queryFactory.select(wikiHistory.afterContent.substring(74))
            .from(wikiHistory)
            .where(
                wikiHistory.wikiPage.id.eq(wikiId)
                    .and(wikiHistory.columnType.eq("IMAGE"))
            )
            .fetch()
    }

    fun findHistoryById(wikiId: Long): MutableList<WikiHistory> {
        return queryFactory.selectFrom(wikiHistory)
            .where(wikiHistory.wikiPage.id.eq(wikiId))
            .orderBy(wikiHistory.createdAt.desc())
            .fetch()
    }
}

 

'JPA' 카테고리의 다른 글

[JPA] QueryDSL에서 Sorting(정렬)하는 Util 메서드 만들기  (0) 2024.06.24