Database

[ Query DSL ] Spring Boot + JPA + Query DSL setting ( Java17 / SpringBoot 3.1.2 )

walwal_ 2023. 9. 19. 01:58

 

팀 프로젝트 시 Query DSL을 사용했었는데,

생각 했던것과 달리 gradle 설정이 많이 어려웠던게 기억이 납니다.

특히, Java11 버전의 Query DSL 설정과 차이가나 여러 글들을 참고했음에도 (무엇이 문제인지 잘 몰랐기 때문에..)

많은 에러를 만났었는데요.. ㅠㅠ

 

그래서 !

이번 글에서는 Java17 과 SpringBoot 3.1.2 에서의 Query DSL 설정을 공유하려 합니다.

 

 

gradle

 

dependencies 
implementation 'com.querydsl:querydsl-jpa:최신 버전' JPA 엔터티에 대한 Querydsl 쿼리를 작성하고 실행하게함.
annotationProcessor "com.querydsl:querydsl-apt:최신 버전" JPA 엔터티 클래스에 Querydsl 어노테이션을 사용하고, 컴파일 시 코드를 생성하도록 함
annotationProcessor "jakarta.annotation:jakarta.annotation-api" Jakarta EE 스펙을 구현하고 Jakarta EE 애플리케이션에서 어노테이션을 사용할 수 있도록 제공
annotationProcessor "jakarta.persistence:jakarta.persistence-api" Jakarta Persistence API (JPA)를 지원.
++  springBoot 3.0 이상 부터는 p6spy 1.9.0 을 사용!
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'  쿼리의 로그를 남겨주는 p6spy 설정 

 

gradle 코드

더보기

 

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.1.2'
    id 'io.spring.dependency-management' version '1.1.2'
//플러그인 없음. -> 구 버전에서는 플러그인을 추가 했었음. 
}


dependencies {
    // JPA
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    //querydsl
    implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta"
    annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
    implementation "com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0"

// 생략
}

 

QueryDslConfig

 

Config 코드

더보기
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager em;

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(this.em);
    }
}

 

 

여기까지 설정 후, 프로젝트를 실행해봅니다.

 

만약 잘 설정되었다면 build → generated 폴더안 Q 클래스가 생성되어 있을 것 입니다.

 

이 Q 클래스는 사용자가 직접 지정한 entity에 대해서만 Q클래스를 생성하게 됩니다.

 

 사용자가 직접 지정한 entity ? 

더보기
사용자가 직접 지정한 entity

 

 

 

 

감사합니다!