-
Spring Boot | Querydsl, Gradle 설정하기 (Eclipse)▼ Backend/└ QueryDsl 2021. 10. 19. 13:12반응형
▶ Querydsl이란
Querydsl 정적 타입을 이용해서 SQL과 같은 쿼리를 생성 할 수 있도록 해 주는 (JPQL 사용성을 높이기 위해 확장한) 프레임워크다. 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있다.
사용 이유에는 여러 가지가 있지만..
- JPQL을 사용하더라도, 복잡한 로직의 경우 개행이 포함된 쿼리 문자열이 길어지기 때문에
- 동적 쿼리를 메소드로 구조화하여 관리를 편하게 하기 위해
단순 문자열과 비교해서 Fluent API를 사용할 때의 장점은 다음과 같다.
- IDE의 코드 자동 완성 기능 사용
- 문법적으로 잘못된 쿼리를 허용하지 않음
- 도메인 타입과 프로퍼티를 안전하게 참조할 수 있음
- 도메인 타입의 리팩토링을 더 잘할 수 있음
build.gradle
전체 설정에 대한 코드를 올렸지만 아래 부분만 추가하면 된다.
// Querydsl START
...
// Querydsl END 안의 내용만 추가한다.
추가 후 적용한다.
프로젝트 우 클릭 → Gradle → Refresh Gradle Projectbuildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.5.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' // Querydsl START id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" // Querydsl END } group = 'sample' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation fileTree(dir: 'libs', include: '*.jar') // Querydsl START implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" implementation "com.querydsl:querydsl-apt:${queryDslVersion}" // Querydsl END implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' } test { useJUnitPlatform() } //Querydsl START def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl // querydslDir 경로에 존재하는 파일을 삭제하는 코드, 필요시 주석해제 //if (file(querydslDir).exists()) delete(file(querydslDir)) } //Querydsl END
Gradle Tasks build
Gradle Tasks 탭에서 해당 프로젝트 선택 → build 우 클릭 Run Gradle Tasks
Gradle Tasks 탭이 없는 경우
상단 탭 Window → Show View → other → gradle 검색 → Gradle Taskbuild(빌드)가 완료되면 build.gradle에서 설정했던
def querydslDir = "$buildDir/generated/querydsl"
부분에 따라서 해당 경로에 QClass들이 생성된다.이제 생성된 QClass 경로를 프로젝트 Java Build Path에 추가한다.
프로젝트 우 클릭 → Build Path → Configure Build Path..
Add Folder.. 를 통해 생성된 경로를 querydsl 경로까지 추가한다.JPAQueryFactory를 Bean으로 등록한다.
import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.querydsl.jpa.impl.JPAQueryFactory; @Configuration public class QueryDslConfig { @PersistenceContext private EntityManager entityManager; @Bean public JPAQueryFactory jpaQueryFactory() { return new JPAQueryFactory(entityManager); } }
jpaQueryFactory를 이용해 QAdmin의 admin 엔티티를 select 한다.
그 외에 조건, 조인, 그룹, 서브 쿼리 등을 사용할 수 있다.
https://querydsl.com/static/querydsl/4.0.1/reference/ko-KR/html_single/#introimport com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @RequiredArgsConstructor @Repository public class AdminRepository { private final JPAQueryFactory jpaQueryFactory; private QAdmin admin = QAdmin.admin; public List<Admin> findAll() { return jpaQueryFactory.from(admin).fetch(); } public Admin findByLgnId(String lgnId) { return jpaQueryFactory.from(admin).where(admin.lgnId.eq(lgnId)).fetchOne(); } }
반응형'▼ Backend > └ QueryDsl' 카테고리의 다른 글
Spring Boot | No constructor found for class.. with parameters (0) 2022.05.12 Spring Boot | Querydsl 서브 쿼리 사용하기 (0) 2021.10.20