通常,您希望您的数据库执行繁重的分页和排序.以MySQL为例,您可以通过添加获得按日期排序的结果页面
ORDER BY date ASC LIMIT 5,5
Run Code Online (Sandbox Code Playgroud)
到SQL查询的末尾.如果您使用hibernate,您可以使用条件API以独立于供应商的方式执行此操作:
List<MyDomainClass> results = (List<MyDomainClass>) getSession()
.createCriteria(MyDomainClass.class)
.setFirstResult(5)
.setMaxResults(5)
.addOrder(Order.asc("date"))
.list();
Run Code Online (Sandbox Code Playgroud)
要显示分页导航,您还需要计算结果总数,以了解有多少页面:
int count = (int) getSession()
.createCriteria(MyDomainClass.class)
.setProjection(Projections.rowCount())
.list().get(0);
Run Code Online (Sandbox Code Playgroud)
您可以为两个搜索添加限制,例如,当您要对可添加的姓氏进行过滤时:
.add(Restrictions.eq("lastname", "Smith")
Run Code Online (Sandbox Code Playgroud)
(这需要添加到计数查询和列表查询中).
当您知道结果总数,页面大小和当前页码时,您可以计算结果范围,如下所示:
// TODO: execute the count query here to determine totalResults
int totalPages = Math.ceil(totalResults / pageSize);
// show first page by default
int firstResult = 0;
if (currentPage >= 0 && currentPage < totalPages) {
firstResult = currentPage * pageSize;
}
// the number of items might be less than the page size (i.e. on the last page)
int count = Math.min(pageSize, totalResults - firstResult);
// TODO: execute the list query here to get a page of data
Run Code Online (Sandbox Code Playgroud)
您如何显示导航由您决定.一些框架具有标准组件.否则,您将不得不考虑处理大量页面的方法.一种常见的方法是显示一系列10个页码和向前/向后跳转以开始/跳转到结束链接.
希望这可以帮助.