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

slee2·2022년 4월 18일
0

(인프런)Querydsl

목록 보기
6/7

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

MemberRepository

JpaRepository의 경우, findAll(), findById() 등은 자동으로 만들어져 있기 때문에 따로 만들 필요는 없다.
하지만, findByUsername()과 같이 특정한 필드로 검색해야하는 경우,
findBy뒤에 필드이름을 쓰게 되면 자동으로 해당 필드로 찾는 쿼리를 작성하는 메서드를 만들어준다.

하지만 이 기능으로는 이러한 자세한 로직을 만들기에는 어렵다.
그렇다면 JpaRepository에서는 어떻게 이 기능을 만들어야할까?

사용자 정의 리포지토리

사용자 정의 리포지토리 사용법
1. 사용자 정의 인터페이스 작성
2. 사용자 정의 인터페이스 구현
3. 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속

MemberRepository

MemberRepositoryCustom

MemberRepositoryImpl

중요
만드는 이름 MemberRepository 뒤에 꼭 Impl을 붙여야한다.(정해진 룰이다.)

이런 식으로 따로 구현한 뒤에 MemberRepository가 상속받는 방법도 있지만,

구현하는 코드들이 매우 특화된 기능이라면, 따로 리포지토리를 만드는 것도 하나의 방법이다.

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

곧 없어질 기능이다.
다른 방법으로 하자면, 그냥 fecth()로 값을 받은 뒤에 List 사이즈를 받아오면 total로 사용할 수 있지 않나 생각이 든다.

이렇게 쿼리를 한번더 작성하는 방법도 있는데,
이것도 곧 없어지는 기능이다.
이거 역시 size()로 해결할 수 있지않나 싶다.

스프링 데이터 페이징 활용2 - CountQuery 최적화

JPAQuery로 받아 fetchCount() 메서드를 람다를 통해 실행함으로써, 최적화를 한다는 것인데 이 역시 기능이 없어지므로 다른 방법을 알아봐야할 것 같다.

스프링 데이터 페이징 활용3 - 컨트롤러 개발

Sort

스프링 데이터 JPA는 Sort를 Querydsl의 정렬(OrderSpecifier)로 편리하게 변경하는 기능을 제공한다.
그런데 join이 들어갈때부터 바로 사용할수가 없다.
그러므로 조인들어가기 시작한다면, 스프링 데이터 페이징이 제공하는 Sort를 사용하기 보다는 파라미터를 받아서 직접 처리하는 것을 권장한다.

0개의 댓글

관련 채용 정보