【问题标题】:Creating Pagination in Spring Data JPA在 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 中实现。

标签: java spring spring-boot spring-data spring-data-jpa


【解决方案1】:

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

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

  1. 页面大小,
  2. 页码,
  3. 排序。

假设我们有:

PageRequest p = new PageRequest(2, 20);

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

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

编辑:

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

【讨论】:

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

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

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

【讨论】:

  • 这在我的spring版本中不存在,如何创建一个peageable对象将查询限制为1?
猜你喜欢
  • 2013-09-15
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2016-02-01
  • 2019-01-08
  • 2017-11-17
  • 2019-02-03
相关资源
最近更新 更多