在 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 中创建分页的主要内容,如果未能解决你的问题,请参考以下文章
php 在CodeIgniter App中创建分页功能。在CodeIgniter中学习如何为分页创建模型,控制器和视图:https://www.cl