IT/development

[jpa] querydsl 세팅(feat. 환경설정만 다룸)

알 수 없는 사용자 2022. 11. 21. 06:54
반응형

목차

    querydsl 예제

     

    JPA를 사용할 때 동적 및 복잡한 쿼리 작성 시 querydsl은 선택이 아닌 필수인데 이게 세팅하기가 좀 까다로움

    그래서 이 곳에 내가 나중에 보기위해 메모를 해둠

    처음 한번만 해두면 나중엔 복붙/수정해서 사용하면 됨

    이 글에서는 querydsl 기본 세팅 방법만 다룸

     

    mybatis와 비교해서 개인적으로 제일 좋은 점은 mybatis는 런타임 때 해당 쿼리를 돌려봐야지만 에러를 알 수 있지만 querydsl은 자바코드라서 오탈자문법 에러가 있으면 컴파일단계에서 바로 알 수 있다.

     

    querydsl 세팅 방법 😎

    build.gradle 설정 😄

    // 스프링부트 2.6x 버전에서 세팅함
    
    buildscript {
        ext {
            queryDslVersion = "5.0.0"
        }
    }
    
    plugins {
        id 'org.springframework.boot' version '2.6.12'
        id 'io.spring.dependency-management' version '1.0.14.RELEASE'
        //querydsl 추가
        id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
        id 'java'
    }
    
    group = 'study'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '1.8'
    
    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        //querydsl 추가
        implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
        implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'
    
        annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"
        compileOnly 'org.projectlombok:lombok'
        runtimeOnly 'com.h2database:h2'
        annotationProcessor 'org.projectlombok:lombok'
        //테스트에서 lombok 사용
        testCompileOnly 'org.projectlombok:lombok'
        testAnnotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    //querydsl 추가 시작
    def querydslDir = "$buildDir/generated/querydsl"
    querydsl {
        jpa = true
        querydslSourcesDir = querydslDir
    }
    sourceSets {
        main.java.srcDir querydslDir
    }
    configurations {
        querydsl.extendsFrom compileClasspath
    }
    compileQuerydsl {
        options.annotationProcessorPath = configurations.querydsl
    }
    //querydsl 추가 끝
    
    tasks.named('test') {
        useJUnitPlatform()
    }

     

    complieQuerydsl 😙

    build.gradle에 설정 추가 후 인텔리제이 기준으로 하단의 이미지처럼 우측 Gradle의 compileQuerydsl 선택해서 컴파일 실행

    빌드 성공 시 아래처럼 build.gradle에서 설정해 놓은 빌드 디렉토리에 Q로 시작하는 파일이 생성되어 있다.

    querydsl에서 사용하는게 이 Q파일이다.

     

    이제 querydsl을 사용할 준비는 다 되었다.

    사용법은 아래와 같이 querydsl을 사용할 클래스의 생성자에서 EntityManager를 주입 받아 JPAQueryFactory객체를 만들어 사용, 자세한 문법은 차차 올릴 예정임(아직 제대로 숙지가 된게 아니라..)

    사용하는 방식은 개발자마다 취향에 따라  다양함

    사용 문법은 SQL과 비슷하게 되어 있다.(SELECT FROM...)

    JPAQueryFactory 소스를 보면 아래처럼 EntityManager를 parameter로 받는게 보인다.

     

    반응형