.分页

简介: 本文介绍了五种分页实现方式:1)RowBounds内存分页,查全量再截取;2)PageHelper插件,自动分页并统计总数;3)SQL原生分页,依赖数据库关键字;4)数组分页,查询全部后subList截取;5)拦截器分页,自定义拦截规则动态添加分页语句。对比了各自优劣与适用场景。

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 总结

相关文章
|
canal 消息中间件 缓存
面试题:如何解决缓存和数据库的一致性问题?
面试题:如何解决缓存和数据库的一致性问题?
762 1
|
Kubernetes Cloud Native Dubbo
多层网关已成过去,网关多合一成潮流,网关改造正当时丨Higress 正式发布 1.0 版本
多层网关已成过去,网关多合一成潮流,网关改造正当时丨Higress 正式发布 1.0 版本
9847 1
|
SQL Java 数据库连接
IDEA开发插件有哪些值得推荐?
这篇文章介绍了IntelliJ IDEA中一些实用的神仙插件,包括RestfulTool(用于快速定位请求处理代码)、Translation(方便代码中的英文翻译)、Alibaba Java Coding Guidelines(遵循阿里巴巴编码规范)、Free MyBatis Tool(增强MyBatis支持)和Mybatis Log(整理SQL日志)。此外,还提到了Vue.js插件和可选装的Grep Console(日志高亮)、Maven Helper(解决Maven依赖冲突)以及Private Notes和Rainbow Brackets(代码注释和括号颜色标记)。
566 2
|
存储 SQL Java
分布式任务调度框架(一):Quartz
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。其功能类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能,作为一个优秀的开源调度框架
1766 0
分布式任务调度框架(一):Quartz
|
NoSQL 关系型数据库 Linux
Rocky Linux镜像在阿里云镜像站首发上线
Rocky Linux镜像详情地址:https://developer.aliyun.com/mirror/rockylinux
2599 0
|
Cloud Native 关系型数据库 MySQL
【阿里云镜像】切换阿里镜像,加速MySQL下载
【阿里云镜像】切换阿里镜像,加速MySQL下载
1242 0
【阿里云镜像】切换阿里镜像,加速MySQL下载
|
消息中间件 存储 数据库
RocketMQ 流存储解析:面向流场景的关键特性与典型案例
RocketMQ 流存储解析:面向流场景的关键特性与典型案例
89308 120
|
Java
StopWatch
StopWatch用法
310 0
|
JSON 前端开发 Java
Swagger介绍及使用
Swagger介绍及使用
369 2
关于@NotNull 注解中groups 的使用
关于@NotNull 注解中groups 的使用
1775 0
关于@NotNull 注解中groups 的使用