JPA(Java Persistence API) | 페이징과 정렬

Page

org.springframework.data.domain.Page<T> 인터페이스 메소드

메소드명 설명
int getNumber(); 현재 페이지 넘버. 0부터 시작
int getSize(); 페이지 크기
int getTotalPages(); 전체 페이지 수
int getNumberOfElements(); 현재 페이지에 나올 데이터 수
long getTotalElements(); 전체 데이터 수
boolean hasPreviousPage(); 이전 페이지 여부
boolean isFirstPage(); 현재 페이지가 첫 페이지 인지 여부
boolean hasNextPage(); 다음 페이지 여부
boolean isLastPage(); 현재 페이지가 마지막 페이지 인지 여부
Pageable nextPageable(); 다음 페이지 객체, 다음 페이지가 없으면 null
Pageable previousPageable(); 다음 페이지 객체, 이전 페이지가 없으면 null
List<T> getContent(); 조회된 데이터
boolean hasContent(); 조회된 데이터 존재 여부
Sort getSort(); 정렬정보

Pageable

Spring data jpa를 사용하면 paging 하기 쉽게 Pageable 인터페이스를 제공해준다.

PageableHandlerMethodArgumentResolverCustomizer

Pageable 인터페이스를 사용하게 되면, page 가 0부터 시작하게 된다. 이 page, size, sort의 기본 설정을 바꾸고 싶다면, org.springframework.data.web.config.PageableHandlerMethodArgumentResolverCustomizer 인터페이스를 커스터마이징 해주면 된다.

page를 1부터 시작하도록 설정

setOneIndexedParameter를 true로 설정해주면, page가 1부터 시작한다.

@Bean
public PageableHandlerMethodArgumentResolverCustomizer customize() {
	return p -> p.setOneIndexedParameters(true);
}

결과로 반환된 Page 정보에 Page::number은 0부터 시작하기 때문에 request로 온 page와 -1씩 차이가 난다.

한 페이지당 출력할 size 기본 설정

setMaxPageSize에 한 페이지당 출력할 size를 정할 수 있다.

@Bean
public PageableHandlerMethodArgumentResolverCustomizer customize() {
	return p -> {
		p.setMaxPageSize(10);		// size=10
	};
}

yml으로 설정

설정 파일 yml에도 지정에 줄 수도 있다.

spring:
  data:
    web:
      pageable:
        default-page-size: 10
        one-indexed-parameters: true

참조