当前位置: 首页 > news >正文

SpringBoot 引入分页插件 PageHelper

官网

https://pagehelper.github.io/docs/howtouse/
在这里插入图片描述

引入步骤

第1步:引入依赖

<!--分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.3.2</version>
</dependency>

在这里插入图片描述

第2步:配置拦截器插件

@Configuration
public class AppConfig {

    @Bean
    public PageInterceptor pageInterceptor() {
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        // 分页合理化,true开启,如果分页参数不合理会自动修正。默认false不启用
        properties.setProperty("reasonable", "true");
        pageInterceptor.setProperties(properties);
        return pageInterceptor;
    }

}

[Ref] 整合PageHelper实现分页

在这里插入图片描述

第3步:插件的使用

前提: 业务提供 查询所有学生的方法

// com.zhangziwa.practisesvr.mapper.UserMapper#listStudents
<select id="listStudents" resultMap="StudentMap">
    SELECT * FROM students
</select>

// com.zhangziwa.practisesvr.mapper.UserMapper
List<Student> listStudents();

在这里插入图片描述

不使用分页插件 会查出全部

List<Student> students = userMapper.listStudents();

在这里插入图片描述

在这里插入图片描述

方式1:PageInfo

public List<Student> listStudents2(Integer pageNum, Integer PageSize) {
	PageHelper.startPage(1, 10, true);
    PageHelper.orderBy("age asc");
    
	List<Student> students = userMapper.listStudents();
	PageInfo<Student> studentPageInfo = PageInfo.of(students);
    return students;
}

在这里插入图片描述
在这里插入图片描述

方式2:Page

public List<Student> listStudents2(Integer pageNum, Integer PageSize) {
	PageHelper.startPage(1, 10, true);
    PageHelper.orderBy("age asc");
    
    Page<Student> students = (Page<Student>) userMapper.listStudents();
    return students;
}

在这里插入图片描述

在这里插入图片描述

方式3:多数据源聚合时的手工分页

public List<Student> listStudents3(Integer pageNum, Integer pageSize) {
	    // 模拟数据聚合
    List<Student> students3 = new ArrayList<>();
    List<Student> students1 = userMapper.listStudents();
    List<Student> students2 = userMapper.listStudents();
    
    students3.addAll(students1);
    students3.addAll(students2);
    
    Page<Student> studentsPage = PageHeaderUtils.manualPage(students3, pageNum, pageSize);
    return studentsPage;
}
// 数据聚合场景下的手工分页
// 也适合EmptyList场景 Page{count=true, pageNum=1, pageSize=10, startRow=0, endRow=0, total=0, pages=0, reasonable=null, pageSizeZero=null}
public static <E> Page<E> manualPage(List<E> res, Integer pageNum, Integer pageSize) {
    if (res == null) {
        res = new ArrayList<>();
    }
    
    int pageNumber = PageUtils.getPageNum(pageNum);
    int sizePerPage = PageUtils.getPageSize(pageSize);
    int totalSize = res.size();
    
    List<E> pageElements = res.stream().skip((long) (pageNumber - 1) * sizePerPage).limit(sizePerPage).toList(); // 分页
    
    Page<E> page = new Page<>();
    page.setPageNum(pageNumber);
    page.setPageSize(sizePerPage);
    page.setTotal(totalSize);
    page.setPages((totalSize / pageSize + ((totalSize % pageSize == 0) ? 0 : 1)));
    page.addAll(pageElements);
    
    return page;
}

在这里插入图片描述

在这里插入图片描述

常见问题

[Q&A] 在系统中发现了多个分页插件

相关文章:

  • Redis 常见数据结构以及使用场景分析
  • JavaScript 异步编程解决方案-中篇
  • DrissionPage获取浏览器Network数据包
  • 【C++入门到精通】智能指针 [ C++入门 ]
  • gem5学习(11):将缓存添加到配置脚本中——Adding cache to the configuration script
  • 远程开发之vacode插件Remote - SSH
  • flutter 打包安卓apk 常用配置
  • Python数据结构——列表
  • androidkiller的两种异常情况
  • golang实现rpc方法一:使用net/rpc库【不能跨平台】
  • Java Swing 图书借阅系统 窗体项目 期末课程设计 窗体设计
  • 基本工具配置
  • 线程到底设置数量多少合适的探讨
  • 计算机网络(湖科大)第一章 概述
  • kubectlkubeletrancherhelmkubeadm这几个命令行工具是什么关系?
  • BIO、NIO、AIO 有什么区别?
  • vscode运行Python的两种方法,及无法运行的原因
  • 白嫖aws创建Joplin server服务器
  • C语言之数组与strlen与sizeof区别和应用
  • Poi实现根据word模板导出-图表篇
  • 中日东三省问题的源起——《1905年东三省事宜谈判笔记》解题
  • 现场丨在胡适施蛰存等手札与文献间,再读百年光华
  • 互降关税后,从中国至美国的集装箱运输预订量飙升近300%
  • 古巴外长谴责美国再次将古列为“反恐行动不合作国家”
  • 美政府以拨款为要挟胁迫各州服从移民政策,20个州联合起诉
  • 美国4月CPI同比上涨2.3%低于预期,为2021年2月来最小涨幅