编程语言
首页 > 编程语言> > java – Jpa分页与数字和下一个,上一个

java – Jpa分页与数字和下一个,上一个

作者:互联网

如果有人问过这个问题并且问了一个可能是愚蠢的问题,我很抱歉这个问题,但我是新手,你是专家,我很乐意从你的专家建议和经验中学习.

我想将分页添加到每页显示200条记录的应用程序.页面底部应该有数字.如果有1050,则第一页将显示100,页面底部将显示数字1,2,3,4,5& 6.

实现这一目标的一般逻辑是什么?
我知道数据库每次都必须选择200,我必须跟踪第一条记录.

>有没有办法知道将返回多少记录总数,以便我可以知道页面底部显示多少个数字?是否需要选择count()语句或其他内容?
>对于1050条记​​录,数字1,2,3,4,5& 6将显示并单击每个需要调用服务器.有没有办法知道在下一次调用服务器时将返回多少条记录?是否需要选择count()语句或其他内容?

解决方法:

您可以使用JPA Criteria API来完成此任务.假设TypedQuery,您将使用setFirstResult和setLastResult来限制从数据库返回的记录.当然,这些方法的值将取决于请求的页面,以及每页显示的记录数.

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
}

标签:java,spring,jpa,hibernate,paging
来源: https://codeday.me/bug/20191008/1870219.html