Query Builder - 초기 설정

2023. 5. 20. 17:12·📦 Database/QueryDSL

💡 QueryDSL - Auto Entity Serialization

코틀린 기반 Spring Boot에서 QueryDSL을 이용해 자동으로 엔티티 직렬화를 하려면 다음과 같은 설정이 필요합니다.


Gradle 설정

QueryDSL을 사용하기 위해서는 Gradle에 QueryDSL 관련 의존성을 추가해야 합니다. build.gradle 파일에 다음과 같이 의존성을 추가합니다.

plugins {
        kotlin("kapt") version "1.4.10" // QueryDSL
        idea // QueryDSL
}

val querydslVersion ="5.0.0" // QueryDSL

dependencies {
        implementation("com.querydsl:querydsl-jpa:$querydslVersion") // QueryDSL
        kapt("com.querydsl:querydsl-apt:$querydslVersion:jpa") // QueryDSL
}

QClass가 IntelliJ를 사용할 수 있도록 경로 추가 (추가 안해도 알아서 QEntity가 생기므로 난 추가 안함)

엔티티를 만들고 어플리케이션을 실행시키면 Entity에 맞는 QType 클래스가 생긴다.

idea {  
    module {  
        val kaptMain = file("build/generated/source/kapt/main")  
        sourceDirs.add(kaptMain)  
        generatedSourceDirs.add(kaptMain)  
    }  
}

QueryDsl Config 작성

@Configuration  
class QueryDslConfig(  
    @PersistenceContext  
    private val entityManager: EntityManager  

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

Application.yml 작성

spring:  

#H2  
  h2:  
    console:  
      enabled: true  

  datasource:  
    url: jdbc:h2:mem:test  
    username: sa  
    password:  
    driver-class-name: org.h2.Driver  

# JPA  
  jpa:  
    hibernate:  
      ddl-auto: create  
    properties:  
      hibernate:  
        format_sql: true  

# Logging  
logging:  
  level:  
    org:  
      hibernate.sql: debug

예제 도메인 모델

Member N : Team 1

image


Member Class

@Entity  
data class Member(  

    @Column(name = "member_id")  
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)  
    var id: Long?,  
    var name: String?,  
    var age: Long?,  

    @ManyToOne(fetch = FetchType.LAZY)  
    @JoinColumn(name = "team_id")  
    var team: Team  
) {  
    constructor(name: String, age: Long, team: Team): this(id = 0L, name = name, age = age, team = team)  

    constructor(name: String?, age: Long): this(0L, name, age, Team("test"))  

    fun changeTeam(team: Team) {  
        this.team = team  
        team.members.plus(this)  
    }  

    fun generateId(): String {  
        return UUID.randomUUID().toString().substring(0, 8)  
    }  
}

Team Class

@Entity  
class Team (  

    @Column(name = "team_id")  
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)  
    var id: Long,  
    var name: String = "",  

    @OneToMany(mappedBy = "team")  
    var members: List<Member> = mutableListOf()  
) {  
    constructor(name: String): this(id = 0L, name = name)  
}
저작자표시

'📦 Database > QueryDSL' 카테고리의 다른 글

Query Builder - 검색 조건 쿼리  (0) 2023.05.20
Query Builder - JPQL vs QueryDsl  (0) 2023.05.20
QueryDsl - Boolean Builder  (0) 2023.05.19
QueryDsl - 성능 개선  (0) 2023.05.19
QueryDSL - Basic  (0) 2023.05.01
'📦 Database/QueryDSL' 카테고리의 다른 글
  • Query Builder - 검색 조건 쿼리
  • Query Builder - JPQL vs QueryDsl
  • QueryDsl - Boolean Builder
  • QueryDsl - 성능 개선
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      React #Markdown
      Lock #Thread #Concurrency
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Query Builder - 초기 설정
    상단으로

    티스토리툴바