您可以使用JPA Criteria API来完成此任务.假设TypedQuery,您将使用setFirstResult和setLastResult来限制从数据库返回的记录.当然,这些方法的值将取决于请求的页面,以及每页显示的记录数.
first = (page - 1) * page size;
last = (page * size) - 1;
注意:这假设第一页是1(而不是零).
要获取记录计数,请执行标准Criteria查询.举个例子:
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
final CriteriaQuery countQuery = builder.createQuery(Long.class);
countQuery.select(builder.count(countQuery.from(MyEntity.class)));
final Long count = entityManager.createQuery(countQuery)
.getSingleResult();
您可以自定义上面的代码以执行相对于另一个查询的计数.最后,您需要一些方法将总计数传回客户端.一种方法是将查询的结果集包装在另一个包含计数属性的对象中,或者在DAO调用的结果中返回所述对象.或者,您可以将count属性存储在请求范围中的对象中.
public class ResultListWrapper {
private Long count;
private Collection results;
// constructor, getters, setters
}