스프링 컨트롤러에서 /members/1 과 같이 GET 요청을 보냈을 때, PK 가 1인 Member 엔티티를 파라미터로 넘겨받을 수 있는 기능을 제공
중간에서 도메인 클래스 컨버터가 동작하여 PK 값에 알맞는 엔티티를 조회하여 파라미터로 넘김
그러나, 컨트롤러에서 트랜잭션없이 조회한 엔티티 객체이므로, 단순 조회용으로만 사용해야함. 준영속 객체이므로 변경감지가 동작하지 않음
단순히 PK로 엔티티를 조회하여 간편하게 사용하는 정도에만 사용하자.
스프링과 데이터 JPA를 사용하면 페이징과 정렬을 매우 간편하게 할 수 있음
컨트롤러에서 페이징이 필요할 경우 메서드 파라미터로 Pageable 을 받을 수 있다.
Pageable을 파라미터로 설정 시, HTTP 요청으로 page, size, sort 와 같은 값을 함께 넘기면, 스프링이 내부적으로 PageRequest 객체를 생성하여 컨트롤러 메서드에 주입해준다.
page: 현재 페이지, 0 페이지부터 시작
size: 페이지당 가져올 컨텐츠의 개수
sort: 정렬 기준을 지정 ex) sort=id,desc
위 설정들을 설정하지 않을 시, 기본 값으로 설정된 값을 따름
기본 값은 전역으로 설정(application.yml) 하거나, 메서드별로 설정(@PageableDefault 어노테이션 파라미터에 사용)하여 변경할 수 있음
추가. 하나의 메서드로 두 가지 이상의 컨텐츠를 페이징하는 경우
@Qualifier 어노테이션을 사용하여 접두사를 통해 구분할 수 있음
ex)
파라미터: @Qualifier("member") Pageable memberPageable
HTTP GET 요청: /members?member_page=3&member_sort=username
추가. Page를 컨트롤러에서 반환타입으로 사용할 때, 엔티티를 DTO로 변환하기
Page<E> 이라는 엔티티를 담은 페이징 결과를 .map 메서드를 사용하여 DTO로 변환할 수 있다.
추가. 0페이지가 아니라, 1페이지부터 시작하고 싶다면?
1. 직접 Page 반환 객체를 원하는 정보롤 반환하도록 재정의하고, Pagable 파라미터로 넘겨받지 않고, 직접 PageRequest 를 생성하여 사용하기
2. application.yml 에 one-indexed-parameters 를 true로 놓고 사용하기 (페이징은 요청에 맞게 잘 되지만, 현재 페이지 정보와 같은 부분을 스프링에서 변환해주진 않아 한계가 있음)