2024. 7. 21. 15:15ㆍTIL
✔오늘 배운 중요한 🔑 point
- QueryDslSupport는 QueryDSL을 사용할 때 필요한 기본 설정을 제공하는 역할을 한다.
🎯 오늘 배운 내용
QueryDslSupport란?
QueryDslSupport는 추상 클래스이며 다른 클래스에서 상속하여 기능을 확장하는 데 사용됩니다. 이 경우, QueryDslSupport는 QueryDSL을 사용할 때 필요한 기본 설정을 제공하는 역할을 한다.
사용 예시
package sparta.nbcamp.wachu.infra.querydsl
import com.querydsl.jpa.impl.JPAQueryFactory
import jakarta.persistence.EntityManager
import jakarta.persistence.PersistenceContext
abstract class QueryDslSupport {
@PersistenceContext
protected lateinit var entityManager: EntityManager
protected val queryFactory: JPAQueryFactory
get() {
return JPAQueryFactory(entityManager)
}
}
@Repository
class WineQueryDslRepositoryImpl : WineQueryDslRepository, QueryDslSupport() {
}
QueryDslSupport()를 구현하는 식으로 사용하면 된다.
@PersistenceContext
@PersistenceContext는 JPA의 애노테이션으로, 엔티티 매니저(EntityManager)를 주입받기 위해 사용된다. 엔티티 매니저는 JPA에서 데이터베이스 작업을 관리하는 핵심 인터페이스로, 엔티티를 생성, 읽기, 업데이트, 삭제하는 작업을 수행한다.
protected lateinit var entityManager: EntityManager
lateinit var는 Kotlin에서 변수를 나중에 초기화할 수 있게 해주며
protected로 선언되어 있어 이 클래스를 상속하는 클래스에서 접근할 수 있다.
entityManager는 JPA의 EntityManager로, 데이터베이스 작업을 수행하는 데 사용된다.
protected val queryFactory: JPAQueryFactory
queryFactory는 JPAQueryFactory 타입의 프로퍼티로, 이를 통해 QueryDSL을 사용할 수 있다. get() 메서드를 통해 entityManager를 사용하여 JPAQueryFactory의 인스턴스를 반환합니다.
JPAQueryFactory는 QueryDSL의 핵심 클래스 중 하나로, JPA 기반의 동적 쿼리를 작성할 때 사용다. 이를 통해 복잡한 SQL 쿼리를 타입 세이프하고 가독성 좋게 작성할 수 있다.
간단한 사용 코드
class WineQueryDslRepositoryImpl : WineQueryDslRepository, QueryDslSupport() {
fun forTest(wineName: String){
val wine = Qwine.wine
return queryFactory.selectFrom(wine)
.where(wine.name.eq(wineName))
.limit(10)
.fetch()
}
해당 코드는 아래의 SQL 쿼리를 의미한다.
SELECT *
FROM wine
WHERE name = 'wineName'
LIMIT 10;
🤔 어떻게 활용할까?
QueryDslSupport를 이용하여 매우 간단하게 SQL 쿼리 문을 작성할 수 있게 되었다.
📓 오늘의 한줄
"We must accept finite disappointment, but never lose infinite hope."
-사 Martin Luther King Jr. -
'TIL' 카테고리의 다른 글
pagedModel fetchJoin 적용후 redis Cache 적용시 발생하는 오류 해결 (0) | 2024.07.23 |
---|---|
pagedModel fetchJoin 적용후 redis Cache 적용시 발생하는 오류 (0) | 2024.07.22 |
Serializing PageImpl instances as-is is not supported 경고 발생 (0) | 2024.07.20 |
Fetch Join (0) | 2024.07.19 |
최종 프로젝트 (7일차) (0) | 2024.07.18 |