java - 带有数字和下一个、上一个的 Jpa 分页

标签 java spring hibernate jpa paging

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

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

完成此操作的一般逻辑是什么? 我知道数据库每次都必须选择 200,我必须跟踪第一条记录。

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

最佳答案

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

first = (page - 1) * page size;
last = (page * size) - 1;

注意:这假设第一页是 1(而不是零)。

要获得记录计数,您可以执行标准条件查询。例如:

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 调用的结果返回所述对象。或者,您可以将计数属性存储在请求范围内的对象中。

public class ResultListWrapper<T> {
    private Long count;
    private Collection<T> results;

    // constructor, getters, setters
}

关于java - 带有数字和下一个、上一个的 Jpa 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144487/

相关文章:

java - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http ://www. springframework.org/schema/data/jpa]

java - Spring 启动 : disable security for status exception code

java - 如何使用字符串列表写入Excel文件

java - 如何在JHipster中为FeignClient启用Autowired?

java - Spring AOP 与 SPring MVC Controller 不工作

java - 提交表单后返回上一页(Spring/Hibernate)

java - 未找到 JNDI 上下文

java - 如何在 Java 中比较字符串?

java - Spring中的异步流程

java - @Transactional 服务方法回滚 hibernate 更改