본문 바로가기
Back-end/JPA 개념

Query DSL이란?

by devraphy 2022. 6. 8.

0. 개요

- 이번 포스팅은 Query DSL에 대해서 간략하게 알아볼 예정이다.

- JPA를 조금 더 효율적으로 사용하고 싶다면 Query DSL에 대해서 알아보자.

 

http://querydsl.com/

 

Querydsl - Unified Queries for Java

Unified Queries for Java. Querydsl is compact, safe and easy to learn. <!-- Querydsl Unified Queries for Java Querydsl provides a unified querying layer for multiple backends in Java. Compared to the alternatives Querydsl is more compact, safer and easier

querydsl.com

 

https://github.com/querydsl/querydsl/tree/master/querydsl-jpa

 

GitHub - querydsl/querydsl: Unified Queries for Java

Unified Queries for Java. Contribute to querydsl/querydsl development by creating an account on GitHub.

github.com

 

 

1. Query DSL

a) Query DSL 이란?

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

- 이전 포스팅에서 Criteria를 이용하여 Java로 쿼리를 작성하는 방법에 대해서 소개한 적이 있다.

- Criteria 기법은 사람이 사용할 방법이 안된다... 그래서 등장한 것이 Query DSL이다. 

 

 

b) Query DSL의 사용

- Query DSL은 select, from , where 등 쿼리 작성에 필요한 키워드를 메서드 형식으로 제공한다.

- 다음 예시를 살펴보자.

 

 // QueryDSL 이용한 메서드
public List<Order> findAll(OrderSearch orderSearch) {
    JPAQueryFactory query = new JPAQueryFactory(em);

    QOrder order = QOrder.order;
    QMember member = QMember.member;

    return query
            .select(order)
            .from(order)
            .join(order.member, member) // 두번째 member는 별칭이다.
            .limit(1000)
            .fetch();
}

 

 

c) Query DSL 설치

- 빌드 자동화 도구를 무엇을 사용하냐에 따라 설치 방법이 상이하다.

- Grandle, Maven 등에 따라 QueryDSL 설치 방법을 구글에서 찾아보기를 권장한다. 

 

- 아래의 설정 파일은 build.gradle 파일이다. 

- 다음과 같이 QueryDSL을 설정할 수 있다. 

 

buildscript {
	dependencies {
		classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10")
	}
}

apply plugin: "com.ewerk.gradle.plugins.querydsl"

dependencies {

	// query dsl
	implementation 'com.querydsl:querydsl-jpa'
	implementation 'com.querydsl:querydsl-apt'
}

//def querydslDir = "$buildDir/generated/querydsl"
def querydslDir = 'src/main/generated'

querydsl {
	library = "com.querydsl:querydsl-apt"
	jpa = true
	querydslSourcesDir = querydslDir
}
sourceSets {
	main {
		java {
			srcDirs = ['src/main/java', querydslDir]
		}
	}
}
compileQuerydsl{
	options.annotationProcessorPath = configurations.querydsl
}
configurations {
	querydsl.extendsFrom compileClasspath
}

 

 

 

댓글