[SpringBoot]- 페이징/정렬처리하기(JpaRepository)(1)

ACAI BERRY DEVELOVER·2023년 6월 17일
0
post-thumbnail

Spring Data JPA를 이용하는 것은 많은 양의 코드를 줄여줄 수 있다.
기존에 스프링과 Hibernate를 이용하는 것은 많은 양의 코드를 직접 작성하게 했지만 그에 비해 Spring Data JPA는 내부적으로 클래스를 생성하는 방식으로 동작하면서 코드가 없는 형식의 개발이 가능하다.

  • 기존 페이징 처리와 정렬: SQL을 공부하는데 반드시 필요한 부분이다.
    페이지처리는 DB마다 사용되는 기법이 달라서 별도의 학습이 가능했다.
    ex) 오라클 - inline view, MySQL - limit
  • JPA는 내부적으로 이러한 처리를 'Dialect'를 이용해서 처리한다.
    자동으로 설정되어 있는 DB에 맞게 Dialect가 설정된다.
    프로젝트 로딩 시점에 출력되는 로그를 통해 확인이 가능하다.
    application.properties 등을 이용해서 설정이 가능하다.
  • JPA가 이처럼 실제 DB에서 사용하는 SQL의 처리를 자동으로 하기 때문에 개발자들은 SQL이 아닌 API의 객체와 메서드를 사용하는 형태로 페이징 처리를 할 수 있게 된다.

findAll() - 페이징처리/정렬을 위한 메소드

  • PagingAndSortRepository의 메소드이다.
  • PagingAndSortRepository는 JpaRepository의 상위 인터페이스이다.
  • findAll(Pageable pageable) 파라미터로 전달되는 Pageable타입의 객체에 의해서 실행되는 쿼리를 결정한다.
  • findAll()의 리턴타입을 Page T 타입으로 지정하는 경우엔 반드시 파라미터로 Pageable 타입을 이용해야 한다.

Pageable 인터페이스 - 페이지 처리를 위한 가장 중요한 존재

  • org.springframework.data.domain.Pageable 인터페이스
  • Pageable 인터페이스는 페이지 처리에 필요한 정보를 전달하는 용도의 타입
  • 인터페이스이기에 실제 객체 구현시엔 구현체인 org.springframework.data.domain.PageRequest 클래스를 이용한다.
  • PageRequest 클래스의 생성자는 특이하게 protected로 선언되어 new를 이용할 수 없다.
  • 객체 생성시 static한 of()를 이용해서 처리한다.
  • PageRequest 생성자를 보면 page,size, Sort를 이용해서 객체를 생성한다.

Reference https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/PageRequest.html

static 메서드인 of()의 경우 몇 가지 형태가 존재한다.
아래의 메소드를 통해 정렬조건을 같이 지정할 수 있다.

public static PageRequest of(int page, int size)

public static PageRequest of(int page, int size, Sort sort)

public static PageRequest of(int page, int size, Sort.Direction direction, 
String... properties) 
profile
쓸때 대충 쓰지 말고! 공부하면서 써!

0개의 댓글