繁体   English   中英

在 Spring 数据中创建分页 JPA

[英]Creating Pagination in Spring Data JPA

我正在尝试在 Spring 数据 JPA 中实现分页功能。我指的是这个博客我的 Controller 包含以下代码:

 @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 条记录??? 我可以参考其他任何分页示例吗?

不推荐使用Pageable的构造函数,而使用of()代替:

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

我上周见过类似的问题,但找不到,所以我会直接回答。

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

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

所以我们假设我们有:

PageRequest p = new PageRequest(2, 20);

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

您不在结果上应用Pageable 您通过查询传递它。

可分页 object 默认带有大小 20,第 0 页和未排序所以如果你想要前端的下一页 url 可以与查询参数页面,大小,排序一起发送,你可以在 postman 上测试它。

您可以使用页面、列表或切片。

如果您不需要页数,而只需要知道下一页是否存在,请使用 Slice,因为它不执行“计数”查询:

  for (int i = 0;  ; i++) { 
     Slice<Organization> pageOrganization = organizationRepository.find(PageRequest.of(0, 100));        
    
    
     List<Organization> organizationList = pageOrganization.getContent();
     for (Organization org : organizationList) {
           // code
     }
    
    if (!pageOrganization.hasNext()) {
        break;
    }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM