通常,您希望数据库为分页和排序工作繁重。例如,使用MySQL,您可以通过添加以下内容按日期对结果页面进行排序
ORDER BY date ASC LIMIT 5,5
到SQL查询的末尾。如果您使用休眠模式,则可以使用标准API以独立于供应商的方式执行此操作:
List<MyDomainClass> results = (List<MyDomainClass>) getSession() .createCriteria(MyDomainClass.class).setFirstResult(5).setMaxResults(5).addOrder(Order.asc("date")).list();要显示分页导航,您还需要计算结果总数以知道有多少页:
int count = (int) getSession() .createCriteria(MyDomainClass.class).setProjection(Projections.rowCount()).list().get(0);
您可以为两个搜索添加限制,例如,当您要过滤姓氏时,可以添加:
.add(Restrictions.eq("lastname", "Smith")(这需要同时添加到计数查询和列表查询中)。
当您知道结果总数,页面大小和当前页数时,您可以计算出结果范围,如下所示:
// TODO: execute the count query here to determine totalResultsint totalPages = Math.ceil(totalResults / pageSize);// show first page by defaultint 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显示导航的方式由您决定。一些框架为此具有标准组件。否则,您将不得不考虑一种处理大量页面的方法。一种常见的方法是显示例如10个页码的范围,以及向前/向后跳转以开始/跳转到结束链接。
希望这可以帮助。



