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

Java 分页实战详解

目录

  • 前言
  • 1. 基本知识
  • 2. 常用API

#1024程序员节 | 征文#

在这里插入图片描述

前言

最终结果不是想要的,索性手动弄拼凑一个分页的数据!

int currentPage = query.getCurrent();
int pageSize = query.getSize();
int total = sortedRecords.size(); // 总记录数
List<Sort> pagedRecords = sortedRecords.stream().skip((long) (currentPage - 1) * pageSize).limit(pageSize).collect(Collectors.toList());// 构建分页对象
IPage<Sort> pagedResult = new Page<>(currentPage, pageSize, total);
pagedResult.setRecords(pagedRecords);// 将分页结果转为 VO 对象并返回
IPage<SortVO> sortVOPage = SortWrapper.build().pageVO(pagedResult);

总体截图如下:

在这里插入图片描述

关于Java的基本知识,推荐阅读:

  1. java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
  2. 【Java项目】实战CRUD的功能整理(持续更新)

对于分页的基本知识点,推荐阅读:(内含不同的语言)

  1. 详细分析MybatisPlus中的Page类(附实战)
  2. 详细分析Mybatis与MybatisPlus中分页查询的差异(附Demo)
  3. 详细分析Element Plus的el-pagination基本知识(附Demo)
  4. Python关于Paginator分页函数详细解析 附实战代码

1. 基本知识

分页是指将大量的数据按照指定的页数和每页记录数,进行拆分处理。分页功能的常见用途是在前端展示海量数据时,避免一次性加载所有数据到页面上,提升性能

基本的数据有如下:

  • 当前页 (currentPage):用户当前所在的页码
  • 每页条数 (pageSize):每页显示的记录数
  • 总记录数 (total):数据的总条数,分页时会依赖该字段来计算总页数
  • 分页数据 (pagedRecords):当前页的数据记录列表

在代码中,currentPage 和 pageSize 是从查询条件中获取的用户请求信息,而 total 是在对数据集合进行分页前,记录的总数

query为条件:

int currentPage = query.getCurrent();// currentPage: 当前页数,从 query 对象中获取
int pageSize = query.getSize();// pageSize: 每页记录数,从 query 对象中获取
int total = sortedRecords.size();// total: 通过 sortedRecords.size() 获取总的记录数

为了限制分页的数据,控件设置正确:

  • skip:跳过前面几页的数据,skip((currentPage - 1) * pageSize) 计算出需要跳过的数据条数
    例如,当前是第 2 页,每页 10 条数据,那么 skip 将跳过前 10 条数据
  • limit:限制返回的记录数,limit(pageSize) 只返回 pageSize 条数据
  • collect:将处理过的数据流转换为列表,成为当前页的记录
List<Sort> pagedRecords = sortedRecords.stream().skip((long) (currentPage - 1) * pageSize) // 跳过前几页的数据.limit(pageSize) // 限制返回的条数.collect(Collectors.toList()); // 收集当前页的数据

对应返回给前端数据显示:

  • IPage: 是 MyBatis-Plus 提供的分页接口,用于表示分页对象
    new Page<>(currentPage, pageSize, total) 创建了一个 Page 实例,传入当前页数、每页记录数和总条数
  • setRecords:将当前页的记录 pagedRecords 设置到分页对象中
IPage<Sort> pagedResult = new Page<>(currentPage, pageSize, total);
pagedResult.setRecords(pagedRecords);

2. 常用API

API说明示例代码
getCurrent()获取当前页码,通常由前端传入int currentPage = query.getCurrent();
getSize()获取每页显示的记录数,通常由前端传入int pageSize = query.getSize();
skip(long n)跳过前 n 条数据,常用于分页时跳过前几页的数据.skip((long) (currentPage - 1) * pageSize)
limit(long n)限制返回的记录数,分页时返回每页的记录数.limit(pageSize)
collect()将流转换为列表,收集分页后的数据.collect(Collectors.toList());
IPage<T>MyBatis-Plus 提供的分页接口,用于存储分页信息,包括当前页、每页条数、总条数、当前页数据等IPage<Sort> pagedResult = new Page<>(currentPage, pageSize, total);
setRecords()设置当前页的记录列表pagedResult.setRecords(pagedRecords);

相关的补充说明更多可以看我上述的链接:

  • 性能优化:如果数据量非常大,使用内存中的 sortedRecords.stream() 进行分页可能不适合
    这种情况下,可以使用数据库层面的分页查询(如 SQL 中的 LIMIT 和 OFFSET),只取出当前页的数据,减少内存占用和处理时间

  • 分页边界问题:需要考虑分页边界条件,例如 currentPage 是否小于 1,是否大于总页数,防止无效分页请求造成错误

  • MyBatis-Plus 的 IPage 接口:在实际开发中,MyBatis-Plus 提供的 IPage 和 Page 实现了分页的所有功能,并且能与数据库查询直接配合,进一步简化分页操作


http://www.mrgr.cn/news/55778.html

相关文章:

  • AI应用程序低代码构建平台Langflow
  • 【机器学习】VQ-VAE(Vector Quantized Variational Autoencoder)
  • 【WPF】中Binding的应用
  • 接口测试(四)jmeter——文件上传
  • 动态内存管理(下 )
  • keepalived(高可用)+nginx(负载均衡)+web
  • 保研推荐信模板
  • Unity地面检测、跳跃
  • 低功耗4G模组的小秘密:RSA算法示例驾到,通通闪开...
  • 一分钟运行DBT入门示例项目(Jaffle Shop)
  • 新的类Rufus应用可带来简单的Windows 11 24H2安装旁路
  • 【07】z检验
  • Redis在实践的关键点
  • autMan框架对接飞书机器人
  • Golang | Leetcode Golang题解之第500题键盘行
  • Flutter Container容器组件实战案例
  • 精选录屏软件下载工具:记录精彩每一刻
  • 基于leaflet-polygon.fillPattern的面状对象图片填充实现
  • SQL CHECK 约束:确保数据完整性的关键
  • 【星闪技术】WS63E模块实时显示当前环境温湿度
  • ARL 灯塔 | CentOS7 — ARL 灯塔搭建流程(Docker)
  • AI学习指南深度学习篇-对比学习(Contrastive Learning)简介
  • 用malloc申请空间的开辟和free空间的释放
  • 计算机网络基本命令
  • 《深度学习》 了解YOLO基本知识
  • Java全栈经典面试题剖析2】JavaSE面向对象1