您可以使用JPA Criteria API来完成此操作。假设TypedQuery,您将使用setFirstResult
andsetLastResult
来限制从数据库返回的记录。当然,这些方法的值将取决于请求的页面以及每页显示的记录数。
first = (page - 1) * page size;
last = (page * size) - 1;
注意:这假设第一页是 1(而不是零)。
要获得记录计数,您需要执行标准 Criteria 查询。举个例子:
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Long> 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<T> {
private Long count;
private Collection<T> results;
// constructor, getters, setters
}