PagingList is used to make it easy to page through a query result. Paging through the results means that instead of all the results are not fetched in a single query Ebean will use SQL to limit the results (limit/offset, rownum, row_number() etc).
Instead of using PagingList you could just use setFirstRow() setMaxRows() on the query yourself. If you are building a stateless application (not holding the PagingList over multiple requests) then this approach is a good option.
For Stateful applications PagingList provides some benefits:
- Fetch ahead (background fetching of the next page via a FutureList query)
- Automatic propagation of the persistence context
- Automatically getting the total row count (via a FutureRowCount query)
So with PagingList when you use Page 2 it will automatically fetch Page 3 data in the background (using a FutureList query). The persistence context is automatically propagated meaning that all the paging queries use the same persistence context.
int pageSize = 10;
PagingList<TOne> pagingList =
Ebean.find(TOne.class)
.where().gt("name", "b")
.findPagingList(pageSize);
// get the row count in the background...
// ... otherwise it is fetched on demand
// ... when getTotalRowCount() or getTotalPageCount()
// ... is called
pagingList.getFutureRowCount();
// get the first page
Page<TOne> page = pagingList.getPage(0);
// get the beans from the page as a list
List<TOne> list = page.getList();
int totalRows = page.getTotalRowCount();
if (page.hasNext()) {
Page<TOne> nextPage = page.next();
...
}