[Spring] QueryDSL 설정

yee·2024년 10월 5일

Spring

목록 보기
4/6

🎈 QueryDSL 이란?

: QueryDSL은 오픈소스 프로젝트로 JPQL을 Java 코드로 작성할 수 있도록 하는 라이브러리


JPQL : Java Persistence Query Language


QueryDSL을 사용하는 이유

  1. 자바 코드로 쿼리를 작성함으로 컴파일 시점에 에러를 잡을 수 있다.
    => 기존 JPQL은 쿼리를 문자열로 작성해야 해서 만약 오타가 있거나 잘못 작성할 경우 런타임 시점에서 에러가 발생하여 실행시키기 전까지는 잘못된 부분을 알 수 없었다.
  2. 복잡한 동적 쿼리를 쉽게 다룰 수 있다.
    => JPQL을 이용해 동적 쿼리를 다루기 위해서는 문자열을 조건에 맞게 조합해서 사용해야 한다. 이는 코드가 복잡해지고 런타임 에러를 발생시키는 치명적인 단점이 있다.
  3. Q클래스, 메서드를 활용하여 복잡한 동적 쿼리를 쉽게 다룰 수 있다.

🎈 QueryDSL 설정

in build.gradle

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

group = 'test'
version = '0.0.1-SNAPSHOT'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	// Spring Boot
	implementation 'org.springframework.boot:spring-boot-devtools'

	
	// 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()
}
// 빌드 단계 src/main/generated중에 생성된 모든 파일이 제거되도록 하여 다음 빌드를 위한 새로운 시작을 제공
clean {
	delete file('src/main/generated')
}

QuerydslConfig.java

QuerydslConfig는 꼭 필요한 것은 아니지만

  • QueryDSL 구성을 중앙화된 방식으로 캡슐화한다.
  • JPAQueryFactory 가 필요한 곳 어디에나 주입할 수 있는 재사용 가능한 빈을 만든다.
  • EntityManger를 통해 적절하게 주입되고 관리되는지 확인 가능하다.
  • 중복을 방지하여 코드를 더 깔끔하고 유지 관리하기 쉽게 만든다.
package site.wellmind.qr.config;

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuerydslConfig {
    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory(){
        return new JPAQueryFactory(entityManager);
    }
}




📃출처 및 참고자료📃

https://velog.io/@evan523/JPA-QueryDSL

0개의 댓글