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 측에 알려줌)
의존성 추가 후 다음을 진행
- [Gradle] → [Tasks] → [other] → [compileKotlin] 실행
- 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 |
---|