spring-boot List转Page的方法步骤

 更新时间:2019年03月01日 14:35:43   作者:陈杰  
这篇文章主要介绍了spring-boot List转Page的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

需求:班级与教师是多对多关系,在后台班级管理需要添加一个接口,传入教师的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调用Windows的DOS命令的方法

    Java调用Windows的DOS命令的方法

    这篇文章主要介绍了Java调用Windows的DOS命令的方法,其主要内容思路是实现调用Windows的ipconfig命令,然后将输出的信息通过IO流输出到控制台。有需要的小伙伴参考下
    2015-02-02
  • java中建立0-10m的消息(字符串)实现方法

    java中建立0-10m的消息(字符串)实现方法

    下面小编就为大家带来一篇java中建立0-10m的消息(字符串)实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • java 读写 ini 配置文件的示例代码

    java 读写 ini 配置文件的示例代码

    这篇文章主要介绍了java 读写 ini 配置文件,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • java实战技巧之if-else代码优化技巧大全

    java实战技巧之if-else代码优化技巧大全

    代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,下面这篇文章主要给大家介绍了关于java实战技巧之if-else代码优化技巧的相关资料,需要的朋友可以参考下
    2022-02-02
  • Java中URL的处理方法详解

    Java中URL的处理方法详解

    URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址,表示为互联网上的资源,本文主要为大家介绍了Java是如何处理URL的,感兴趣的可以了解一下
    2023-05-05
  • 详解Java从后台重定向(redirect)到另一个项目的方法

    详解Java从后台重定向(redirect)到另一个项目的方法

    这篇文章主要介绍了详解Java从后台重定向(redirect)到另一个项目的方法,非常具有实用价值,需要的朋友可以参考下
    2017-04-04
  • SpringBoot如何优雅实现接口参数验证

    SpringBoot如何优雅实现接口参数验证

    为了保证参数的正确性,我们需要使用参数验证机制,来检测并处理传入的参数格式是否符合规范,所以本文就来和大家聊聊如何优雅实现接口参数验证吧
    2023-08-08
  • 基于HTML5+js+Java实现单文件文件上传到服务器功能

    基于HTML5+js+Java实现单文件文件上传到服务器功能

    应公司要求,在HTML5页面上实现上传文件到服务器功能,对于我这样的菜鸟,真是把我难住了,最后还是请教大神搞定的,下面小编把例子分享到脚本之家平台,供大家参考
    2017-08-08
  • MyBatis-Plus中提供的各种注解详细说明

    MyBatis-Plus中提供的各种注解详细说明

    这篇文章主要介绍了MyBatis-Plus中提供的各种注解详细说明,下面对MyBatis-Plus提供的注解进行整理,本文提供了部分示例代码以方便理解,需要的朋友可以参考下
    2023-11-11
  • 深入了解Java线程池:从设计思想到源码解读

    深入了解Java线程池:从设计思想到源码解读

    这篇文章将从设计思想到源码解读,带大家深入了解Java的线程池,文中的示例代码讲解详细,对我们的学习或工作有一定的帮助,需要的可以参考一下
    2021-12-12

最新评论