spring-boot List转Page的方法步骤

所属分类: 软件编程 / java 阅读数: 42
收藏 0 赞 0 分享

需求:班级与教师是多对多关系,在后台班级管理需要添加一个接口,传入教师的id和pageable,返回带分页数据的班级信息。

Page<Klass> pageByTeacher(Long teacherId, Pageable pageable);

一开始打算是在KlassRepository(继承自PagingAndSortingRepository)中添加一个类似findByElementId的接口,然后直接返回带分页的数据。但是试了几次并不成功,无论是把teacher还是将带teacher的List传入方法中都失败。

换了一种思路,直接调TeacherRepository的FindById()方法找到teacher,然后返回teacher的成员klassList就行了。

  Teacher teacher = teacherRepository.findById(teacherId).get();
  List<Klass> klassList = teacher.getKlassList();

但是光返回klassList还不行,需要将它包装成Page才行,去官网上查到了一种使用List构造Page的方法

PageImpl
public PageImpl(List<T> content,
Pageable pageable,
long total)
Constructor of PageImpl.
Parameters:
content - the content of this page, must not be null.
pageable - the paging information, must not be null.
total - the total amount of items available. The total might be adapted considering the length of the content given, if it is going to be the content of the last page. This is in place to mitigate inconsistencies.

参数:

  • content: 要传的List,不为空
  • pageable: 分页信息,不为空
  • total: 可用项的总数。如果是最后一页,考虑到给定内容的长度,total可以被调整。这是为了缓解不一致性。(这句没懂什么意思),可选

一开始还以为它会自己按照传入的参数分割List

Page<Klass> klassPage = new PageImpl<Klass>(klassList, pageable, klassList.size());

结果debug发现不行,得手动分割,就去网上参考了别人的写法

 // 当前页第一条数据在List中的位置
  int start = (int)pageable.getOffset();
  // 当前页最后一条数据在List中的位置  
  int end = (start + pageable.getPageSize()) > klassList.size() ? klassList.size() : ( start + pageable.getPageSize());
  // 配置分页数据
  Page<Klass> klassPage = new PageImpl<Klass>(klassList.subList(start, end), pageable, klassList.size());

debug查看结果


最后为了增加复用性,改成范型方法:

  public <T> Page<T> listConvertToPage(List<T> list, Pageable pageable) {
  int start = (int)pageable.getOffset();
  int end = (start + pageable.getPageSize()) > list.size() ? list.size() : ( start + pageable.getPageSize());
  return new PageImpl<T>(list.subList(start, end), pageable, list.size());
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

java实现背单词程序

这篇文章主要为大家详细介绍了java实现背单词程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java实现单词查询小程序

这篇文章主要为大家详细介绍了java实现单词查询小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java程序开发环境配置图文教程

这篇文章主要为大家详细介绍了Java程序开发环境配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解ssh框架原理及流程

在本文中小编给大家整理的是关于ssh框架原理及流程的相关知识点内容,有此需要的朋友们可以学习下。
收藏 0 赞 0 分享

Java实现弹窗效果的基本操作

这篇文章主要为大家详细介绍了Java实现弹窗效果的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解springmvc常用5种注解

在本篇里我们给大家总结了关于springmvc常用5种注解相关知识点以及实例代码,需要的朋友们参考下。
收藏 0 赞 0 分享

Java实现弹窗效果的基本操作(2)

这篇文章主要为大家详细介绍了Java实现弹窗效果的基本操作第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Spring Boot假死诊断实战记录

这篇文章主要给大家介绍了关于Spring Boot假死诊断的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java计时新姿势StopWatch详解

这篇文章主要介绍了Java计时新姿势StopWatch,最近公司来了个大佬,从他那里学到不少东西,其中一个就是计时的新姿势「StopWatch」,需要的朋友可以参考下
收藏 0 赞 0 分享

java实现点击按钮弹出新窗体功能

这篇文章主要为大家详细介绍了java实现点击按钮弹出新窗体功能,旧窗体不进行操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多