본문 바로가기

Advance I/Querydsl

22.07.20

실무 활용 - 스프링 데이터 JPA와 Querydsl

JPARepository<Entity, Id>를 상속받은 리포지토리 인터페이스

기본적인 CRUD나 정적쿼리는 인터페이스만 만들면 스프링 데이터 JPA가 구현체를 생성해준다. (쿼리 메서드 기능)

 

동적 쿼리를 위한 Querydsl 사용을 위해서는 내가 직접 구현 코드를 작성해야 한다.

사용자 정의 리포지토리

사용자 정의 리포지토리 사용법

1. 사용자 정의 인터페이스 작성

2. 사용자 정의 인터페이스 구현

3. 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속

참고: 22.07.02 (tistory.com) 

스프링 데이터 페이징 활용1 - Querydsl 페이징 연동

스프링 데이터의 Page, Pageable을 Querydsl에서 활용

Querydsl로 직접 메서드를 구현하는 것이므로 사용자 정의 리포지토리에 정의

 

* 예제: 검색조건 + 페이징 정보 모두 반영한 search 메서드 구현 *

 

.offset(pageable.getOffset())

.limit(pageable.getPageSize())

 

PageImpl: 스프링 데이터의 Page의 구현체. static 생성자 파라미터 (content, pageable, total)

(-> PageableExecutionUtils.getPage() 로 최적화 가능)

 

fetchResults(count 쿼리 포함), fetchCount()가 deprecated 됨에 따라 select 쿼리와는 별도로 count 쿼리를 작성하고 fetch() 를 사용해야 한다. count 쿼리는 페이징이 필요없고, 경우에 따라서는 조인도 필요 없을 수 있다.

Long totalCount = queryFactory
        //.select(Wildcard.count) //select count(*)
        .select(member.count()) //select count(member.id)
        .from(member)
        .where(...)
        .fetchOne();

 

 

 

 

 

 

 

 

 

'Advance I > Querydsl' 카테고리의 다른 글

22.07.21  (0) 2022.07.21
22.07.18  (0) 2022.07.18
22.07.14  (0) 2022.07.14
22.07.13  (0) 2022.07.13
22.07.07 :: 실전! Querydsl  (0) 2022.07.07