JPAのページネーションとソート

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は、簡単にページネーションを行うためのPageableインターフェースを提供します。

PageableHandlerMethodArgumentResolverCustomizer

デフォルトではページ番号は0から始まります。pagesizesortのデフォルト設定を変更するには、org.springframework.data.web.config.PageableHandlerMethodArgumentResolverCustomizerをカスタマイズします。

ページ番号を1から開始する

setOneIndexedParametersをtrueに設定します。

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

返されるPage::numberは0から始まるため、リクエストのページ番号とは1ずれます。

デフォルトのページサイズを設定する

setMaxPageSizeでページサイズを設定します。

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

YAMLで設定する

YAMLファイルでも設定できます。

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

参考資料