개발/Java, Kotlin
[Kotlin] SpringBoot 동적쿼리를 위한 QueryDsl 설정하기 + 간단한 사용 방법
Kangjieun11
2023. 11. 17. 20:32
728x90
✅ QueryDSL 설정하기
1️⃣ build.gradle.kts에 plugins 추가
plugins {
//for querydsl
kotlin("kapt") version "1.7.10"
}
2️⃣ dependencies 추가
이후 dependencies를 추가해주면 되는데,
나는 kapt에서 빨간줄이 뜨길래 plugins만 추가하고, 빌드한번 해준 다음 dependencies를 추가했다.
dependencies {
//querydsl
implementation("com.querydsl:querydsl-jpa:5.0.0")
kapt("com.querydsl:querydsl-apt:5.0.0:jpa")
}
3️⃣ Build
빌드 성공시 인텔리제이 좌측 상단
build > generated > source > kapt > main > com > ... 엔티티 파일 위치에 QClass가 생긴것을 확인할 수 있다.
✅ QueryDSL 사용하기
1️⃣ JPAQueryFactory를 빈으로 등록하는 설정파일을 추가해준다.
나는 configuration 디렉터리를 하나 추가해 관리하고 있어서 이곳에 추가했다.
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 entityManager: EntityManager
@Bean
fun jpaQueryFactory(): JPAQueryFactory {
return JPAQueryFactory(entityManager)
}
}
✍️ 이전에 QueryDsl을 처음 공부할때 그린 그림
https://jie0025.tistory.com/254
사용할때 아래와 같은 형태로 정의해주면된다.
⬇️ 자세한 설명 여기
✔️ DomainCustomRepository 인터페이스를 생성한다. 여기에 동적쿼리를 사용할 메서드들을 정의한다.
interface EmployeeSeatCustomRepository {
fun methodName(number: Long): Domain
}
✔️ DomainCustomRepository에 정의한 메서드들을 실제로 구현할 DomainCustomRepositoryImpl을 생성한다.
아래 예제는,
1. qDomain을 변수로 만든다.
2. jpaQueryFactory에 qClass로 접근, myNumber와 DB의 number와 값이 같은(.eq) 것을
3. 1개 가져와 반환하는 쿼리문이다.
@Repository
class DomainCustomRepositoryImpl (
private val jpaQueryFactory: JPAQueryFactory
): DomainCustomRepository {
override fun methodName(myNumber: Long): Domain {
val qDomain = QDomain.domain
val query = jpaQueryFactory
.selectFrom(qDomain)
.where(qDomain.domain.number.eq(myNumber))
return query.fetchOne()
}
}
✔️ 기존에 DB와 연결하던 DomainRepository 인터페이스 우측에 DomainCustomRepository를 추가해주면 된다.
interface DomainRepository: JpaRepository<EmployeeSeat, Long>, DomainCustomRepository {
}
빌드하고 요청을 보내보면, 정상적으로 작동하는것을 확인할 수 있다!