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