Play2.4(Ebean4)のfindPagedListでページング

ページングを実装しようと思い、方法を探していたのだけれど… どこのページを見てもfindPagingList()しか載ってない。

でもPlay2.4でライブラリとして使っているEbeanではfindPagingList()が削除されていて、 findPagedList()に置き換わっていた。

github覗いてみる。

github.com

使い方

今までの'findPagingList()'はこんな使い方(使ったことないけど)

public List<Item> findPageItems(Integer page){
    Model.Finder<Long, Item> finder = new Model.Finder<>(Item.class);
    return finder
            .orderBy("id desc")
            .findPagingList(MAX_ITEM_PER_PAGE)
            .getPage(page)
            .getList();
}

それをこうする。

public PagedList<Item> getPagedList(Integer page){
    Model.Finder<Long, Item> finder = new Model.Finder<>(Item.class);
    return finder
            .orderBy("id desc")
            .findPagedList(page, MAX_ITEM_PER_PAGE);
}

public List<Item> findPageItems(Integer page){
    return getPagedList(page).getList();
}

メソッドに分けたけど、別に分けなくていいと思う。
PagedListが取得できたら、そこから指定したページのアイテムリストを取得する。
他にも、次のページ・前のページが有るかどうかや、最大ページ数なども取得できる。

getList()は取得結果のリストがキャッシュされる。
getTotalPageCount()hasNext()は同じキャッシュ(futureRowCount)をつかうみたい。

github.com

以上