分页

简介: /

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接收后进行分页操作。创建StudentMapper.xml文件,编写查询的sql语句:
可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。这里是查询到所有的学生信息。接下来在service层获取数据并且进行分页实现:
定义IStuService接口,并且定义分页方法:

1

List<Student> queryStudentsByArray(int currPage, int pageSize);

通过接收currPage参数表示显示第几页的数据,pageSize表示每页显示的数据条数。
创建IStuService接口实现类StuServiceIml对方法实现,对获取到的数组通过currPage和pageSize进行分页:

1

2

3

4

5

6

7

8

@Override

public List<Student> queryStudentsByArray(int currPage, int pageSize) {

List<Student> students = studentMapper.queryStudentsByArray();

//  从第几条数据开始        

int firstIndex = (currPage - 1) * pageSize;

//  到第几条数据结束        

int lastIndex = currPage * pageSize; return students.subList(firstIndex, lastIndex);

}

通过subList方法,获取到两个索引间的所有数据。
最后在controller中创建测试方法:

1

2

3

4

5

6

@ResponseBody    

@RequestMapping("/student/array/{currPage}/{pageSize}")

public List<Student> getStudentByArray(@PathVariable("currPage") int currPage, @PathVariable("pageSize") int pageSize) {

List<Student> student = StuServiceIml.queryStudentsByArray(currPage, pageSize);

return student;

}

通过用户传入的currPage和pageSize获取指定数据。
5 拦截器分页
自定义拦截器实现了拦截所有以ByPage【或自己约束的都是可以的】结尾的查询语句,并且利用获取到的分页相关参数统一在sql语句后面加上limit分页的相关语句。
6 总结
逻辑分页:即内存分页,就是mybatis自带的rowbounds,内存开销大,数据量小效率比物理分页快,但大数据量,易内存溢出
物理分页:上述2345,小数据量效率比逻辑分页慢,但是大数据量推荐用物理分页。
物理分页总是优先于逻辑分页。

相关文章
|
5月前
|
canal Java 关系型数据库
|
4月前
|
运维 Kubernetes 监控
K8s 管理平台怎么选?Rancher、OpenShift、kOps、EKS、GKE —— 运维视角下的真相对比
K8s 管理平台怎么选?Rancher、OpenShift、kOps、EKS、GKE —— 运维视角下的真相对比
596 17
|
6月前
|
机器学习/深度学习 数据可视化 Apache
仅3B激活参数,更强的多模态理解与推理能力,百度文心 ERNIE-4.5-VL-28B-A3B-Thinking正式开源!
11月11日,百度开源文心ERNIE-4.5-VL-28B-A3B-Thinking多模态模型,仅3B激活参数,性能媲美顶级大模型。具备强大视觉语言理解、跨模态推理与“图像思考”等创新功能,支持工具调用与视频分析,适用于复杂图文任务,全面开放商用。
924 17
仅3B激活参数,更强的多模态理解与推理能力,百度文心 ERNIE-4.5-VL-28B-A3B-Thinking正式开源!
|
10月前
|
人工智能 iOS开发 Windows
装了就舍不得卸载的一款电脑截图软件!
这是一款免费且功能强大的截图工具,支持Windows和Mac系统。它不仅界面简洁无广告,还提供带壳截图、文字提取、内容翻译与AI解释等实用功能,极大提升工作与学习效率。下载地址:https://tool.nineya.com/s/1j06j6dmj
1208 0
|
5月前
|
安全 数据安全/隐私保护 数据中心
阿里云智能接入网关APP收费价格及SAG设置教程
智能接入网关SAG是阿里云提供的SD-WAN上云服务,支持分支互联、移动办公等场景。通过APP实现终端加密接入,按活跃终端数收费:1个终端459元/年,5个2295元/年,31个1395元/月。支持多地部署,配置简单,助力企业快速安全上云。
959 0
|
Java 数据安全/隐私保护 容器
Java详解:GUI容器组件 | 功能组件
Java详解:GUI容器组件 | 功能组件
492 0
|
Java 开发者 Spring
SpringBoot支持的日志框架以及默认启用的日志框架
SpringBoot支持的日志框架以及默认启用的日志框架
975 0
SpringBoot支持的日志框架以及默认启用的日志框架
|
开发框架 安全 Java
★推荐一款适用于SpringBoot项目的轻量级HTTP客户端框架 上
★推荐一款适用于SpringBoot项目的轻量级HTTP客户端框架 上
748 0
★推荐一款适用于SpringBoot项目的轻量级HTTP客户端框架    上
|
运维 JavaScript 前端开发
海纳百川无所不容,Win10环境下使用Docker容器式部署前后端分离项目Django+Vue.js
随着现代化产品研发的不断推进,我们会发现,几乎每个产品线都会包含功能各异的服务,而且服务与服务之间存在也会存在着错综复杂的依赖和被依赖关系,这就会带来一个世界性难题,项目部署的时候需要运维来手动配制服务之间通信的协议和地址,稍有不慎就会导致服务异常,同时如果服务器因为坏道或者其他原因导致更换物理机,重新部署新环境的成本也会非常之高。因此,我们就会寄希望于Docker这种的容器技术可以让我们构建产品所需要的所有的服务能够迅速快捷的重新部署,并且可以根据需求做横向扩展,且能够保证稳定的容灾性,在出现问题的时候可以利用守护进程自动重启或者启动容灾备份。
海纳百川无所不容,Win10环境下使用Docker容器式部署前后端分离项目Django+Vue.js
|
Android开发 数据安全/隐私保护
Thinker 使用详解(下)
Thinker 使用详解(下)
Thinker 使用详解(下)

热门文章

最新文章