Database & ORM/JPA 프로젝트
7. Querydsl 적용
MJ.Lee
2022. 3. 11. 09:08
JPQL과 Querydsl
JPQL은 JPA에서 제공하는 가장 중요한 객체지향 쿼리 언어이다.
JPQL 특징
- 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리다.
- SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.
예를 들면 아래의 select문과 같다. Item이란 테이블이 아니라, Item 객체를 대상으로 검색한다.
Querydsl은 JPQL을 편하게 작성할 수 있게 도와주는 JPQL 빌더 역할을 한다.
오픈 소스이므로 라이브러리를 설치해야 한다.
Querydsl 라이브러리 Gradle로 설치
build.gradle에 아래 부분을 추가해준다.
implementation 'com.querydsl:querydsl-jpa'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
Settings를 IntelliJ로 둔다.
QClass가 src/main/generated경로로 생성된다.
Gradle로 하면 build/generated/sources/annotationProcessor/java/main경로에 생성된다.
Querydsl 사용하여 주문 목록 조회
요건
- 검색 조건으로 회원명과 주문상태가 있다.
- 검색을 누르면 주문 목록을 조회해온다.
QueryDSL 기본 문법
프로젝트에 Querydsl 5버전을 사용했다.
Querydsl 5버전이 '자바 ORM 표준 JPA 프로그래밍'에 나온 3버전과 달라서, 문법이 변경되었다. 변경된 기본 문법은 여기에 자세히 정리되어있다.
- JPAQueryFactory 객체를 사용하여 아래처럼 query를 만들어 사용하면 된다.
- selectFrom 뿐만 아니라, update, delete를 이용해 수정, 삭제도 가능하다.
- where, orderBy, groupBy처럼 문법이 SQL과 유사하여 이해하기 어렵지 않다.
- fetch()하면 조회 결과들을 가지고 오고, fetchOne()을 사용하면 한 개의 결과만 가지고 온다.
BooleanBuilder : 동적 Query 작성
BooleanBuilder를 사용하면 특정 조건에 따른 동적 쿼리를 편리하게 생성할 수 있다.
고객명(MemberName)과 주문상태(OrderStatus) 유무에 따라 동적으로 쿼리를 생성한다.
StringUtils는 org.springframework.util.StringUtils 이다.
StringUtils.hasText 메소드는 문자열의 내용이 없거나, null이면 false를 반환한다.
StringUtils의 메소드에 관한 정리는 여기를 참고하면 된다.