QueryDsl이란?


정적 타입(컴파일 시 타입에 대한 정보를 결정)을 이용해서 

SQL과 같은 쿼리를 생성할 수 있도록 해 주는 오픈소스 프레임워크

 

왜쓰는가?

JPA를 사용하다 보면 기본 기능으로 해결되지 않는 경우에는 네이티브 쿼리를 사용하게 된다. 그런데 네이티브 쿼리는 문자열을 이어 붙이기 떄문에 오타가 발생하기 쉽고 가독성이 떨어지는 단점이 있다.

Querydsl을 사용하면 자동 완성과 같은 IDE의 기능을 사용할 수 있고, 컴파일 시점에 타입이나 문법 오류를 확인할 수 있다. 또한 동적 쿼리도 쉽게 사용할 수 있어서 편리하다. 물론 경우에 따라서 적용 필요성이 다를 수 있기 때문에 프로젝트의 특성에 따라서 적절하게 선택하자

 

 

😎장점

문자가 아닌 코드로 쿼리를 작성할 수 있어 컴파일 시점에 문법 오류를 확인할 수 있다.
인텔리제이와 같은 IDE의 자동 완성 기능의 도움을 받을 수 있다.
복잡한 쿼리나 동적 쿼리 작성이 편리하다.
쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다.
JPQL 문법과 유사한 형태로 작성할 수 있어 쉽게 적응할 수 있다.

자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만, 복잡한 쿼리, 동적 쿼리를 구현하는 데 있어 한계가 있다. 이러한 문제점을 해결할 수 있는 것이 QueryDSL이다.

 

 

 

사용법! + 프로젝트 적용

 

1. build.gradle에 설정 추가

 

2. QueryDsl config설정

여기서 등록한 jpaQueryFactory빈을 Repository에서 사용하게 된다.

 

=> 이제 컴파일 단계에서 엔티티를 기반으로 Q클래스 파일들을 생성! 이 클래스를 기반으로 쿼리를 작성한다.

 

생성된 Q클래스 파일

3.Repositoty정의

실제 쿼리를 작성하고 수행할 Repository를 만든다.
JPA인터페이스 메서드와 QuertDsl기반으로 사용할 메서드를 모두 사용할 것이다.

1) JPA인터페이스 메서드도 같이 사용할 수 있도록 yatarepository인터페이스를 정의한 후, 그 안에 메소드를 작성한다.

2) queryDsl로 구현할 메서드는 yataRepositoryimpl에 구현!

 

 

복사했습니다!