3.分页

简介: 本文介绍五种分页实现方式:MyBatis自带RowBounds内存分页、PageHelper插件分页、原生SQL分页、数组分页(查全量再subList)及拦截器分页。前两者属逻辑分页,数据量小见效快但内存压力大;后三者为物理分页,通过SQL或拦截机制实现,适合大数据量场景,性能更优。

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,小数据量效率比逻辑分页慢,但是大数据量推荐用物理分页。

相关文章
|
容器 Kubernetes API
深入解析 Kubebuilder:让编写 CRD 变得更简单
作者 | 刘洋(炎寻) 阿里云高级开发工程师 导读:自定义资源 CRD(Custom Resource Definition)可以扩展 Kubernetes API,掌握 CRD 是成为 Kubernetes 高级玩家的必备技能,本文将介绍 CRD 和 Controller 的概念,并对 CRD 编写框架 Kubebuilder 进行深入分析,让您真正理解并能快速开发 CRD。
13802 3
|
IDE TensorFlow 算法框架/工具
成功解决 OSError: [WinError 193] %1 不是有效的 Win32 应用程序
成功解决 OSError: [WinError 193] %1 不是有效的 Win32 应用程序
|
存储 前端开发 开发工具
Git Hooks实战:提交前检查修改文件中是否包含调试代码
Git Hooks实战:提交前检查修改文件中是否包含调试代码
517 0
|
5月前
|
人工智能 监控 数据可视化
9.9元起搭建AI数字员工!阿里云OpenClaw部署教程、命令大全与新手排错手册
在AI Agent快速普及的今天,OpenClaw(Clawdbot)凭借轻量化、可扩展、支持浏览器自动化与多IM平台接入等优势,成为个人与小微企业打造专属AI数字员工的首选工具。但传统部署方式需要配置环境、编写代码、调试端口,对零基础用户极不友好。阿里云推出的OpenClaw一键部署方案,彻底解决了这一痛点:官方镜像预装、零代码可视化配置、低成本轻量服务器、新用户享海量免费Token,全程最快10分钟即可完成部署,让每个人都能拥有24小时待命的AI助手。
1620 1
|
5月前
|
人工智能 JSON 安全
多Agent之间个人访问凭证的安全传递问题
本文探讨多Agent场景下用户凭证安全传递的核心挑战,解析RFC 7523(JWT断言)、RFC 8693(令牌交换)及IETF AI Agent委托草案的技术方案,并以Microsoft Entra Agent ID为范例,阐述如何通过OBO流程、权限缩减、委托链审计(act声明)与企业治理实现安全、可控、可追溯的凭证委托。
952 1
|
4月前
|
人工智能
Vibe Coding:快速原型与工程化的平衡
本文反思“氛围编程”(vibe coding)的双刃剑效应:虽能极速产出原型,却易致代码快速腐化、边界模糊、契约失焦。作者提出关键转向——从“生成优先”升级为“治理优先”,强调冻结边界、建立单一事实源、实施棘轮式约束,并将AI角色由“功能扩张者”转变为“工程收敛引擎”,方能守护项目可演进性与复用价值。(239字)
407 0
|
7月前
|
机器学习/深度学习 自然语言处理 安全
2026年语音机器人技术架构解析与企业选型指南
随着AI技术发展,语音机器人已广泛应用于政务、医疗、企业服务等领域。本文从技术架构、核心指标、场景适配等维度,系统解析语音机器人选型关键,助力企业科学决策,推动智能化升级。
|
7月前
|
安全 网络安全 API
伪装成税务文件的“银狐”:中国背景APT组织首次用印度所得税诱饵发动精准网络间谍战
“银狐”APT组织伪装税务邮件,利用双扩展名诱骗点击,植入木马窃取敏感数据。其攻击高度定制化,采用LOLBins、进程镂空等技术绕过传统防护,凸显企业需加强EDR、零信任与员工安全意识的紧迫性。
581 0
|
8月前
|
数据采集 领域建模 数据库
领域模型图(数据架构/ER图)
通过四色原型法进行领域建模,提取数据架构核心要素:红色时标原型(MI)表征业务流程节点,绿色参与方-物品原型(PPT)构建实体,黄色角色原型(Role)明确参与主体,蓝色描述原型(DESC)定义属性。基于风控系统流程,逐步构建领域模型,最终提炼出ER图,清晰展现实体间一对一、一对多、多对多关系,实现从业务到数据模型的精准转化。(238字)
|
8月前
|
存储 消息中间件 开发框架
8应用架构图
应用架构图是技术实现的蓝图,体现系统内外部应用间的调用与数据关系。基于业务架构,划分展现、业务、数据和基础层,明确技术选型与分层逻辑。单体架构四层分离,职责清晰;分布式架构体现SOA服务调用,突出内部集成与外部依赖。通过调用链路与边界标注,厘清系统定位,支撑产品演进。(238字)

热门文章

最新文章