이전의 코드
- JPQL을 주로 사용했음
- 면접때도 JPQL을 사용한 이유에 대한 지적을 받았었는데 저번 프로젝트를 할때도 시간적 여유가 없어서 익숙한 JPQL을 사용했었다.
JPQL vs QueryDSL
- 주로 JPQL을 사용했는데 다른 방식인 QueryDSL을 사용해보기로함
- QueryDSL은 파라미터 바인딩이 필요 없다
- JPQL은 오류발생 시점이 실행이 되어서야 확인할 수 있음(런타임 에러) 반대로 QueryDSL은 컴파일 시점에 에러를 확인 할 수 있다.
컴파일타임(Compile time)과 런타임(RunTime)
- 런타임 RunTime
컴파일 과정을 마치고 사용자에 의해서 실행되는 시점
- 컴파일 타임 Compile Time
개발자가 개발 언어로 소스코드를 작성하고 난뒤 컴퓨터가 인식할 수 있는 기계어 코드로 변환되는 시점
QueryDSL 설정
buildscript {
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'
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'
implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
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()
}
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
}