
build 폴더안에 있는 내용이 자동으로 import IDE 설정에서 Build, Execution, Deployment > Build Tools > Gradle에서
Build and run using이 gradle로 설정되어 있는지 확인해야 한다.
만약 잘 안된다면 IDE 설정이 꼬여서 그럴 수 있습니다. 이런 경우에는 IDE를 종료하고, 프로젝트 폴더에 숨겨져 있는 .idea 폴더를 삭제해주세요. 그리고 프로젝트를 처음부터 다시 import 해주세요.
Build and run using (IntelliJ IDEA) - import 인식 X

Build and run using (Gradle) - import 인식 O

중요!!!

Querydsl 부트 3.x 설정
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.5'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(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'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
//test 롬복 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
//Querydsl 추가
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 설정부
//def generated = 'src/main/generated'
//
//// querydsl QClass 파일 생성 위치를 지정
//tasks.withType(JavaCompile) {
// options.generatedSourceOutputDirectory = file(generated)
//}
//
//// java source set 에 querydsl QClass 위치 추가
//sourceSets {
// main.java.srcDirs += "$projectDir/build/generated"
//}
//
//// gradle clean 시에 QClass 디렉토리 삭제
//clean {
// delete file(generated)
//}
// gradle clean 시에 QClass 디렉토리 삭제
clean {
delete file('src/main/generated')
}
Test
package com.example.querytest.controller;
import com.example.querytest.entity.Hello;
import com.example.querytest.entity.QHello;
import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@Transactional
class HelloControllerTest {
@Autowired
EntityManager em;
@Test
void contextLoads() {
Hello hello = new Hello();
em.persist(hello);
JPAQueryFactory query = new JPAQueryFactory(em);
QHello qHello = QHello.hello;
Hello result = query
.selectFrom(qHello)
.fetchOne();
Assertions.assertThat(result).isEqualTo(hello);
//lombok 동작 확인 (hello.getId())
Assertions.assertThat(result.getId()).isEqualTo(hello.getId());
}
}
Spring Boot 애플리케이션에서 테스트를 작성할 때, 수동으로 트랜잭션을 관리할 필요가 없습니다. 대신 @Transactional 어노테이션을 사용하여 자동으로 트랜잭션을 관리할 수 있습니다. 이렇게 하면 EntityTransaction tx와 수동 트랜잭션 관리를 할 필요가 없어집니
Querydsl이란 무엇인가?
Querydsl은 Java 기반의 데이터베이스 쿼리 작성 도구입니다. 객체 지향적인 방식으로 SQL, JPA, MongoDB 쿼리를 생성할 수 있도록 지원합니다. Querydsl을 사용하면 Java 코드에서 직접적으로 타입 안전한 쿼리를 작성할 수 있어 컴파일 시점에 쿼리의 오류를 확인할 수 있습니다.
Querydsl을 사용하는 이유
- 타입 안전성:
- Querydsl은 타입 안전한 쿼리 작성을 가능하게 합니다. 이는 컴파일 시점에 쿼리 오류를 확인할 수 있어 런타임 오류를 줄이는 데 도움이 됩니다.
- 가독성:
- Querydsl은 Java 코드와 유사한 문법을 사용하여 쿼리를 작성하므로, 쿼리의 가독성이 향상됩니다. 이는 유지보수 및 협업에 큰 도움이 됩니다.
- 자동 완성 지원:
- IDE에서 코드 자동 완성을 지원하여 쿼리를 작성하는 속도와 정확도를 높일 수 있습니다.
- 동적 쿼리 작성:
- 조건에 따라 동적으로 쿼리를 작성할 수 있어 복잡한 쿼리도 쉽게 처리할 수 있습니다.
- 다양한 데이터베이스 지원:
- SQL, JPA, MongoDB 등 여러 데이터베이스를 지원하므로, 다양한 환경에서 Querydsl을 사용할 수 있습니다.
application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/~/test
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
# show_sql: true
format_sql: true
logging:
level:
org.hibernate.SQL: debug
# ort.hibernate.type: trace
- org.hibernate.SQL: debug: Hibernate가 실행하는 SQL 쿼리를 디버그 수준에서 로그로 출력합니다.
- org.hibernate.type: trace: Hibernate가 SQL 쿼리에 사용하는 파라미터 값을 트레이스 수준에서 로그로 출력합니다.
P6Spy는 데이터베이스 쿼리를 로깅하고 모니터링할 수 있는 라이브러리입니다.
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
'QueryDSL' 카테고리의 다른 글
| [Query DSL] 스프링 데이터JPA 리포지토리와 Querydsl (0) | 2024.08.10 |
|---|---|
| [Query DSL] 순수 JPA 리포지토리와 Querydsl (0) | 2024.08.07 |
| [Query DSL] 중급 문법 (1) | 2024.08.07 |
| [Query DSL] 검색 조건 쿼리 (0) | 2024.07.04 |
| [Query DSL] 기본문법 (0) | 2024.07.04 |