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

LEE ·2023년 9월 29일

Querydsl

목록 보기
9/10

1. 스프링 데이터 JPA 리포지토리로 변경

2. 사용자 정의 리포지토리

3. 스프링 데이터 페이징 활용

1. 스프링 데이터 JPA 리포지토리로 변경

스프링 데이터 JPA - MemberRepository 생성

스프링 데이터 JPA 테스트


2. 사용자 정의 리포지토리

스프링 데이터 JPA 에서 정리하였던 사용자 정의 repository 이다.

스프링 데이터 JPA 에서 querydsl 을 사용하기 위해선 사용자 정의 repository 를 구현하여 사용하거나 따로 repository를 구현하여 사용한다.

1) 사용자 정의 인터페이스를 만들기

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


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

4) 사용자 정의 인터페이스 동작 테스트


3. 스프링 데이터 페이징 활용

3-1 ) Querydsl 페이지 연동

  • 스프링 데이터의 Page, Pageable을 활용해보자.
  • 전체 카운트를 한번에 조회하는 단순한 방법
  • 데이터 내용과 전체 카운트를 별도로 조회하는 방법

사용자 정의 인터페이스에 페이징 2가지 추가

전체 카운트를 한번에 조회하는 단순한 방법( searchPageSimple(), fetchResults() 사용 )

Querydsl이 제공하는 fetchResults() 를 사용하면 내용과 전체 카운트를 한번에 조회할 수 있다.(실제 쿼리는 2번 호출)

fetchResult() 는 카운트 쿼리 실행시 필요없는 order by 는 제거한다.

데이터 내용과 전체 카운트를 별도로 조회하는 방법( searchPageComplex() )


전체 카운트를 조회 하는 방법을 최적화 할 수 있으면 이렇게 분리하면 된다. (예를 들어서 전체 카운트를 조회할 때 조인 쿼리를 줄일 수 있다면 상당한 효과가 있다.)

ㄴ코드를 리펙토링해서 내용 쿼리과 전체 카운트 쿼리를 읽기 좋게 분리하면 좋다.

3-2 ) CountQuery 최적화

PageableExecutionUtils.getPage()로 최적화

스프링 데이터 라이브러리가 제공

count 쿼리가 생략 가능한 경우 생략해서 처리

페이지 시작이면서 컨텐츠 사이즈가 페이지 사이즈보다 작을 때

마지막 페이지 일 때 (offset + 컨텐츠 사이즈를 더해서 전체 사이즈 구함, 더 정확히는 마지막 페이지 이면서 컨텐츠 사이즈가 페이지 사이즈보다 작을 때)

3-3 ) 컨트롤러 개발

3-4 ) 스프링 데이터 정렬(Sort) 참고만

0개의 댓글