分页

简介: 本文介绍了五种分页实现方式:MyBatis自带RowBounds内存分页、PageHelper插件分页、SQL原生分页、数组分页(查全量后subList)及拦截器分页。前两者属逻辑分页,适合小数据量;后三者为物理分页,适用于大数据量,避免内存溢出,提升性能。

1 自带rowbound分页
先将所有的结果集查询出来ResultSet,再进行内存分页(limit)

2 第三方插件pagehelper
会将一个查询SQL变成两部分执行,假设SQL是:select name from user;
①自动识别数据库类型,添加对应的分页关键字,如MySQL则limit,Oracle则rownum,DB2则fetch,查找出上面SQL的结果
②查找出上面结果,查询结果的总条数count
3 SQL分页
依赖limit进行实现,或者rownum等自身的SQL实现
4 数组分页

简而言之:查全部再subList

首先在dao层,创建StudentMapper接口,用于对数据库的操作。在接口中定义通过数组分页的查询方法,如下所示:
List queryStudentsByArray();
方法很简单,就是获取所有的数据,通过list接收后进行分页操作。创建StudentMapper.xml文件,编写查询的sql语句:

select from student
可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。这里是查询到所有的学生信息。接下来在service层获取数据并且进行分页实现:
定义IStuService接口,并且定义分页方法:
List queryStudentsByArray(int currPage, int pageSize);
通过接收currPage参数表示显示第几页的数据,pageSize表示每页显示的数据条数。
创建IStuService接口实现类StuServiceIml对方法实现,对获取到的数组通过currPage和pageSize进行分页:
@Override
public List queryStudentsByArray(int currPage, int pageSize) {
List students = studentMapper.queryStudentsByArray();
// 从第几条数据开始
int firstIndex = (currPage - 1)
pageSize;
// 到第几条数据结束
int lastIndex = currPage * pageSize; return students.subList(firstIndex, lastIndex);
}
通过subList方法,获取到两个索引间的所有数据。
最后在controller中创建测试方法:
@ResponseBody
@RequestMapping("/student/array/{currPage}/{pageSize}")
public List getStudentByArray(@PathVariable("currPage") int currPage, @PathVariable("pageSize") int pageSize) {
List student = StuServiceIml.queryStudentsByArray(currPage, pageSize);
return student;
}
通过用户传入的currPage和pageSize获取指定数据。
5 拦截器分页
自定义拦截器实现了拦截所有以ByPage【或自己约束的都是可以的】结尾的查询语句,并且利用获取到的分页相关参数统一在sql语句后面加上limit分页的相关语句。
6 总结
逻辑分页:即内存分页,就是mybatis自带的rowbounds,内存开销大,数据量小效率比物理分页快,但大数据量,易内存溢出
物理分页:上述2345,小数据量效率比逻辑分页慢,但是大数据量推荐用物理分页。

相关文章
|
人工智能 安全 API
这款流行 AI 工具被盗用挖取加密货币,这些隐患你需要知道
Docker 镜像被注入挖矿脚本并不是个别现象,而是一个需要引起重视的安全问题,本文向大家分享下 Higress 防范此类风险的相关经验。
476 89
|
2月前
|
缓存 开发工具 git
QLExpress使用及源码分析
QLExpress是阿里开源的轻量级规则引擎,支持通过YAML配置表达式规则。支持AST语法树解析、上下文构建与动态执行,提供脚本缓存、别名映射、指令重写等扩展能力,适用于灵活的业务逻辑解耦与动态化控制。
|
2月前
|
Arthas 存储 运维
记Arthas实现一次CPU排查与代码热更新
本文介绍如何使用Arthas排查线上Java应用CPU占用过高问题。通过`thread`定位高耗能线程,`watch`监控方法调用与异常,结合`jad`反编译与`redefine`实现热更新,无需重启服务即可修复代码,提升线上问题响应效率。适用于SpringBoot + JDK8环境。
|
2月前
|
Arthas Java 测试技术
Arthas安装
Arthas是一款Java诊断工具,需先启动Java应用并安装JDK。通过arths-boot.jar启动后选择对应进程即可接入,支持多进程管理,适用于SpringBoot等应用的线上问题排查与性能分析。(236字符)
|
机器学习/深度学习 人工智能 算法
深度学习在计算机视觉中的突破与未来趋势###
【10月更文挑战第21天】 近年来,深度学习技术极大地推动了计算机视觉领域的发展。本文将探讨深度学习在图像识别、目标检测和图像生成等方面的最新进展,分析其背后的关键技术和算法,并展望未来的发展趋势和应用前景。通过这些探讨,希望能够为相关领域的研究者和从业者提供有价值的参考。 ###
704 4
|
Java 开发工具 数据库
入职必会-开发环境搭建01-JDK下载和安装
JDK(Java Development Kit)是Java开发工具包,包含Java虚拟机(JVM)、Java类库及开发工具,如调试器、性能分析工具和文档生成工具。JVM执行Java字节码,类库提供预定义类和方法简化开发,开发工具助力高效开发、调试和优化Java应用。
495 5
入职必会-开发环境搭建01-JDK下载和安装
|
存储 NoSQL Java
Java中使用redis的bitMap实现签到功能
这个实现示例提供了一种灵活、高效的方式,展示了如何使用Redis来解决现实中的问题。
738 2
|
机器学习/深度学习 编解码 算法
R语言用FNN-LSTM假近邻长短期记忆人工神经网络模型进行时间序列深度学习预测4个案例
R语言用FNN-LSTM假近邻长短期记忆人工神经网络模型进行时间序列深度学习预测4个案例
|
机器学习/深度学习 数据可视化 算法
基于深度学习的花卉检测与识别系统(YOLOv5清新界面版,Python代码)
基于深度学习的花卉检测与识别系统(YOLOv5清新界面版,Python代码)
1567 0

热门文章

最新文章