Spring Data JPA で遊んでみる 〜その4〜
こんどは
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> { // ... Page<T> findAll(Pageable pageable); }
のPageableを使ってみる。なんとなく何するものかわかりますが、ぺーじゃーてきなあれです。Pageableの実装クラスは今のところPageRequestだけです。これをnewして使います。コンストラクタはこんなん。
public PageRequest(int page, int size) public PageRequest(int page, int size, Direction direction, String... properties) public PageRequest(int page, int size, Sort sort)
page番号と、pageに含める要素数、ソートの設定をします。Sortはまえ紹介したやつです。
基本的な使い方はこんなん。
Page<Emp> page = repository.findAll(new PageRequest(3, 3));
戻りはPage型です。ここから色々とページの情報がとれます。
List<Emp> emps = page.getContent(); // 取得した要素をListで取得 int number = page.getNumber(); // ページ番号を取得 int numberOfElements = page.getNumberOfElements(); // 取得したページの要素数 int size = page.getSize(); // 指定したページの要素数 long totalElements = page.getTotalElements(); // 全件の数を取得 int totalPages = page.getTotalPages(); // ページ数を取得
ソートを指定する場合は、前回のようにSortを使って食わせるだけです。
// ソートを指定する page = repository.findAll(new PageRequest(0, 4, ASC, "dept.id", "name")); assertThat(page.getSize(), is(4)); // OrderBySourceを使用してソートを指定する page = repository.findAll(new PageRequest(0, 5, new OrderBySource("NameDesc").toSort())); assertThat(page.getSize(), is(5));
サンプルはこのへん
https://github.com/yamkazu/springdata-jpa-example/tree/pageable