본문 바로가기
QueryDSL

Springboot3.x에서 Querydls 설정

by 이상한나라의개발자 2024. 3. 14.

SpringBoot 3.x 프로젝트에서 QueryDsl 설정 방법을 설명합니다. 

 

의존성 추가

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.1.9'
    id 'io.spring.dependency-management' version '1.1.4'
}

group = 'com.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-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    // 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('bootBuildImage') {
    builder = 'paketobuildpacks/builder-jammy-base:latest'
}

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

// Querydsl 설정 추가
// clean task가 실행될 때, src/main/generated 디렉토리 모든 파일과 디렉토리 삭제
clean {
    delete file('src/main/generated')
}

 

TestEntity 생성

@Entity
@Getter
@Table(name = "test")
public class TestEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
}

 

QueryDsl Q파일 생성

./gradlew compileJava

 

또는 IntelliJ를 사용중이라면, 우측 gralde > Tasks > other > compileJava 를 클릭 하시면됩니다.

위 방법으로  설정한 디렉토리에 아래와 같이 생성이 됩니다.

 

QueryDsl 사용 예시

@SpringBootTest
@Transactional
class Querydsl2024ApplicationTests {


    @Autowired
    EntityManager em;

    @Test
    void contextLoads() {
        TestEntity testEntity = new TestEntity();
        em.persist(testEntity);
        JPAQueryFactory query = new JPAQueryFactory(em);
        QTestEntity qTestEntity = QTestEntity.testEntity;

        TestEntity result = query
                .selectFrom(qTestEntity)
                .fetchOne();

        assertThat(result).isEqualTo(testEntity);
        assertThat(result.getId()).isEqualTo(testEntity.getId());

    }
}

 

쿼리 파라미터 로그 남기기

SpringBoot 3.x 이상이면 p6spy 1.9.0 이상 버전을 사용해야 합니다.

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'

 

'QueryDSL' 카테고리의 다른 글

QueryDsl 프로젝션 결과 반환  (0) 2024.03.25
QueryDsl 서브쿼리  (0) 2024.03.20
QueryDsl 조인  (0) 2024.03.20
Querydsl 기본 문법  (0) 2024.03.15
QueryDsl 소개  (0) 2024.03.15