일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 정보처리산업기사
- 백준알고리즘
- 문제풀이
- 스프링
- 소프티어
- 알고리즘
- 회고
- python
- kotlin
- SQL
- 코틀린
- MYSQL
- 코딩교육봉사
- 파이썬
- CJ UNIT
- 코딩봉사
- 자바
- 백준 알고리즘
- 시나공
- 백준
- C++
- 1과목
- 공부일지
- 프로그래머스
- BFS
- programmers
- SW봉사
- 데이터베이스
- java
- softeer
Archives
- Today
- Total
JIE0025
[Kotlin] SpringBoot 동적쿼리를 위한 QueryDsl 설정하기 + 간단한 사용 방법 본문
개발/Java, Kotlin
[Kotlin] SpringBoot 동적쿼리를 위한 QueryDsl 설정하기 + 간단한 사용 방법
Kangjieun11 2023. 11. 17. 20:32728x90
✅ 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 {
}
빌드하고 요청을 보내보면, 정상적으로 작동하는것을 확인할 수 있다!
references
'개발 > Java, Kotlin' 카테고리의 다른 글
[Kotlin] 클래스 선언시 (소괄호), {중괄호}의 차이는? (Feat 변수 초기화) (3) | 2023.11.16 |
---|---|
[Kotlin] JPA-Hibernate 엔티티 생성에서 data class, 일반 class 중 어떤것을 선택해야할까? (0) | 2023.11.16 |
스레드 생성과 우선순위 (Runnable 인터페이스 & Thread 상속) (0) | 2023.08.14 |
[디자인패턴] 변화하는 것을 분리하자! (Strategy 전략패턴) (0) | 2023.08.13 |
멀티스레딩의 개요 및 운영체제 기초 (0) | 2023.08.06 |