[Spring] QueryDSL 설정

Nam_JU·2022년 11월 21일
0

Spring

목록 보기
10/11
post-custom-banner

이전의 코드

  • JPQL을 주로 사용했음
  • 면접때도 JPQL을 사용한 이유에 대한 지적을 받았었는데 저번 프로젝트를 할때도 시간적 여유가 없어서 익숙한 JPQL을 사용했었다.



JPQL vs QueryDSL

  • 주로 JPQL을 사용했는데 다른 방식인 QueryDSL을 사용해보기로함
  • QueryDSL은 파라미터 바인딩이 필요 없다
  • JPQL은 오류발생 시점이 실행이 되어서야 확인할 수 있음(런타임 에러) 반대로 QueryDSL은 컴파일 시점에 에러를 확인 할 수 있다.

    컴파일타임(Compile time)과 런타임(RunTime)

    • 런타임 RunTime
      컴파일 과정을 마치고 사용자에 의해서 실행되는 시점
    • 컴파일 타임 Compile Time
      개발자가 개발 언어로 소스코드를 작성하고 난뒤 컴퓨터가 인식할 수 있는 기계어 코드로 변환되는 시점

QueryDSL 설정


buildscript { // QueryDSL(1)
    ext {
        queryDslVersion = "5.0.0"
    }
}

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.5'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    // QueryDSL(2)
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

group = 'dev.kakao5'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {

    implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'

    //swagger
    implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'

    // QueryDSL(3)
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    implementation "com.querydsl:querydsl-apt:${queryDslVersion}"


    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
    runtimeOnly 'mysql:mysql-connector-java'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

}

tasks.named('test') {
    useJUnitPlatform()
}

// QueryDSL(4)
def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
}
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}
//querydsl 추가 끝


profile
개발기록
post-custom-banner

0개의 댓글