在 Spring Data JPA 中创建分页

Posted

技术标签:

【中文标题】在 Spring Data JPA 中创建分页【英文标题】:Creating Pagination in Spring Data JPA 【发布时间】:2017-04-04 12:36:54 【问题描述】:

我正在尝试在 Spring Data JPA 中实现分页功能。 我是referring this 博客 我的控制器包含以下代码:

 @RequestMapping(value="/organizationData", method = RequestMethod.GET)
  public String list(Pageable pageable, Model model)
    Page<Organization> members = this.OrganizationRepository.findAll(pageable);
    model.addAttribute("members", members.getContent());
    float nrOfPages = members.getTotalPages();
    model.addAttribute("maxPages", nrOfPages);
    return "members/list"; 
  

我的 DAO 正在关注:

@Query(value="select m from Member m", countQuery="select count(m) from Member m")
  Page<Organization> findMembers(Pageable pageable);

我可以显示前 20 条记录,如何显示后 20 条??? 还有其他我可以参考的分页示例吗?

【问题讨论】:

您引用的博客也有一个部分可以让您指定页码。我想这将是您想要使用的。 是的,我看到了,但是它是 Spring MVC,我想在 Spring Data JPA 中实现相同的功能。如何将其修改为 Spring data JPA?/ ...如果您一直在学习使用 Spring Data 面向 Spring MVC 的整个教程,那么为什么不至少尝试一下呢?还是你已经尝试过了?如果你这样做了,那么可以显示你尝试的代码、你期望发生的事情以及发生了什么? 只传递一个名为page的请求参数。这将绑定到您的请求方法中的Pageable 对象。 其实我正在做的项目是在 Spring Data JPA 中,所以我需要在 Spring Data JPA 中实现。 【参考方案1】:

上周也遇到过类似的问题,但是没找到,直接回答。

你的问题是你指定参数太晚了。 Pageable 的工作方式如下:创建具有某些属性的 Pageable 对象。您至少可以指定:

    页面大小, 页码, 排序。

假设我们有:

PageRequest p = new PageRequest(2, 20);

上面传递给查询的内容将过滤结果,因此只会返回 21 日到 40 日的结果。

您没有对结果应用Pageable。您将其与查询一起传递。

编辑:

PageRequest 的构造函数已弃用。使用Pageable pageable = PageRequest.of(2, 20);

【讨论】:

注意:索引是从零开始的页面索引。 新的 PageRequest() 构造函数已弃用 @J3ernhard 还没有准备好这个答案。 @xenteros 没错,关于 PageRequest 的更多信息:***.com/q/44848653/4121281 如何设置页面大小不限?【参考方案2】:

Pageable 的构造函数已弃用,请改用of()

Pageable pageable = PageRequest.of(0, 20);

【讨论】:

这在我的spring版本中不存在,如何创建一个peageable对象将查询限制为1?

以上是关于在 Spring Data JPA 中创建分页的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中创建分页?

插入表格会在 s-s-rS 报告中创建分页符

php 在CodeIgniter App中创建分页功能。在CodeIgniter中学习如何为分页创建模型,控制器和视图:https://www.cl

spring data jpa 的分页以及条件查询

Spring Data Jpa: 分页和排序

Spring Data Jpa: 分页和排序