문자열
을 사용한다. 문자열을 조건에 따라 이어붙이는 형식으로 구성하기 때문에 생기는 문제가 있다. 문자열이기에 오타가 발생해도 컴파일 단계에서 에러를 잡아주지 못한다.(다만, NamedQuery를 사용하면 가능하다.) 또한 동적쿼리를 구성할 때, 중간중간 if문에 의해 문자열이 추가되기 때문에 가독성이 떨어진다. 따라서 쿼리를 체계적으로 관리하기 어렵다.최근 IntelliJ 버전은 Gradle로 실행을 하는 것이 기본 설정이다. 이렇게 하면 실행속도가 느리다. 다음과 같이 변경하면 자바로 바로 실행하므로 좀 더 빨라진다.
1. Preferences Build,Execution,Deployment BuildTools Gradle
2. Build and run using: Gradle IntelliJ IDEA
3. Run tests using: Gradle IntelliJ IDEA
- 기본 테스트 케이스 실행
- 스프링 부트 메인 실행 후 에러페이지로 간단하게 동작 확인(http://localhost:8080)
- 테스트 컨트롤러를 만들어서 spring web 동작 확인(http://localhost:8080/hello)
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'study'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Querydsl 추가 (Spring boot 3.x 이상)
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
tasks.named('test') {
useJUnitPlatform()
}
/**
* QueryDSL Build Options
*/
def querydslDir = "src/main/generated"
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile).configureEach {
options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}
clean.doLast {
file(querydslDir).deleteDir()
}
Gradle - Task - other - compileJava를 실행하면 된다.
아래와 같이 src/main/generated 경로에 QClass가 생성된다.
테스트 케이스로 실행 검증
참고: 스프링 부트에 아무런 설정도 하지 않으면 h2 DB를 메모리 모드로 JVM안에서 실행한다.
개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공
choihyewon@choehyewon-ui-noteubug Spring % cd /Users/choihyewon/Desktop/개발/Backend_Spring/Spring/kim-querydsl
choihyewon@choehyewon-ui-noteubug kim-querydsl % cd h2/bin
choihyewon@choehyewon-ui-noteubug bin % chmod 755 h2.sh
choihyewon@choehyewon-ui-noteubug bin % ls -alrth
total 5136
-rw-rw-r--@ 1 choihyewon staff 105B Sep 16 18:03 h2w.bat
-rwxr-xr-x@ 1 choihyewon staff 109B Sep 16 18:03 h2.sh
-rw-rw-r--@ 1 choihyewon staff 98B Sep 16 18:03 h2.bat
-rw-rw-r--@ 1 choihyewon staff 2.5M Sep 16 18:03 h2-2.2.224.jar
drwxr-xr-x@ 6 choihyewon staff 192B Oct 24 22:56 .
drwxr-xr-x@ 9 choihyewon staff 288B Oct 24 22:59 ..
choihyewon@choehyewon-ui-noteubug bin % ./h2.sh
최소 한번
데이터베이스 생성! → 연결끊고→ jdbc:h2:tcp://localhost/~/querydsl 이렇게 접속
insert
조회했는데 데이터가 없는이유? 테스트에 트랜잭셔널이 있으면 기본적으로 롤백을 해버린다! → @commit 달아주면
쿼리파라미터 로그 남기기 - 스프링 부트 3.0
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'