MyBatis分页

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本文介绍MyBatis分页实现方式:RowBounds为内存分页,数据量大易溢出;PageHelper等插件通过SQL改写实现物理分页,支持多数据库;还可通过subList或自定义拦截器分页。总结:大数据场景推荐物理分页,性能更优,优先于逻辑分页。(238字)

本文介绍MyBatis分页实现方式:自带RowBounds为内存分页,数据量大易溢出;PageHelper等插件通过SQL改写实现物理分页,支持多种数据库;还可通过数组subList或自定义拦截器实现。总结:大数据推荐物理分页,优先于逻辑分页。
1 自带rowbound分页
先将所有的结果集查询出来ResultSet,再进行内存分页(limit)2 第三方插件pagehelper会将一个查询SQL变成两部分执行,假设SQL是:select name from user;①自动识别数据库类型,添加对应的分页关键字,如MySQL则limit,Oracle则rownum,DB2则fetch,查找出上面SQL的结果②查找出上面结果,查询结果的总条数count3 SQL分页依赖limit进行实现,或者rownum等自身的SQL实现4 数组分页简而言之:查全部再subList首先在dao层,创建StudentMapper接口,用于对数据库的操作。在接口中定义通过数组分页的查询方法,如下所示:方法很简单,就是获取所有的数据,通过list接收后进行分页操作。创建StudentMapper.xml文件,编写查询的sql语句:
XML复制代码

select from student
可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。这里是查询到所有的学生信息。接下来在service层获取数据并且进行分页实现:定义IStuService接口,并且定义分页方法:
Java运行代码复制代码
List queryStudentsByArray(int currPage, int pageSize);
通过接收currPage参数表示显示第几页的数据,pageSize表示每页显示的数据条数。创建IStuService接口实现类StuServiceIml对方法实现,对获取到的数组通过currPage和pageSize进行分页:
Java运行代码复制代码
@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中创建测试方法:
Java运行代码复制代码
@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,小数据量效率比逻辑分页慢,但是大数据量推荐用物理分页。物理分页总是优先于逻辑分页。

相关文章
|
安全 数据处理 数据安全/隐私保护
企业出海数据合规:何为数据脱敏
数据脱敏并非简单技术手段,其涵盖法律与技术双重维度。法律上,脱敏是保护个人隐私的一种效果,技术上则是采用不可逆或难以还原的方法,降低数据泄露风险。GDPR下,个人身份、账户和健康信息等应脱敏处理,程度可根据数据敏感性确定。脱敏常见方法包括随机化、掩码、加密等,旨在保护数据安全与隐私。
1501 0
|
机器学习/深度学习 编解码 算法
MMDetection系列 | 4. MMDetection模型代码训练及测试过程的详细解析
MMDetection系列 | 4. MMDetection模型代码训练及测试过程的详细解析
1410 0
MMDetection系列 | 4. MMDetection模型代码训练及测试过程的详细解析
|
4月前
|
机器学习/深度学习 数据采集 人工智能
大模型训练方法与技术术语解释
预训练、微调、RLHF等技术构成大模型核心训练体系:预训练打基础,微调适配具体任务,RLHF融入人类偏好,思维链提升推理,少/零样本实现快速迁移,指令微调增强指令理解,自监督利用海量无标注数据,温度控制生成风格,蒸馏压缩模型,缩放定律指导高效扩展。
|
4月前
|
人工智能 NoSQL 前端开发
面试真题
多套AI与Java面试题涵盖RAG、智能体、大模型部署、分布式系统、JVM调优、数据库设计等核心技术,深入考察项目经验、架构能力与技术深度,适用于中高级工程师岗位选拔。
|
4月前
|
消息中间件 人工智能 Linux
基于 RocketMQ 构建 高可靠 A2A 通信通道
A2A协议由Google发起,旨在实现跨厂商AI智能体的标准化通信。通过RocketMQ异步支持,提供高可靠、开箱即用的多智能体协同方案,助力构建开放、可扩展的智能体生态体系。
|
4月前
|
机器学习/深度学习 存储 自然语言处理
大模型基础概念术语解释
大语言模型(LLM)基于Transformer架构,通过海量文本训练,具备强大语言理解与生成能力。其核心组件包括注意力机制、位置编码与嵌入层,支持文本分割为Token进行处理。参数量达十亿乃至万亿级,展现涌现与泛化能力,能完成多任务推理。混合专家模型(MoE)提升效率与扩展性,推动大模型持续发展。(237字)
|
4月前
|
监控 Java 调度
XXLJob定时任务概述
定时任务指按时间表达式周期执行的任务,适用于对账、提醒、订单超时等场景。实现方式包括单体架构的轮询休眠、Timer、ScheduledExecutorService、Quartz及SpringTask;分布式架构面临重复执行、动态调整、故障转移等问题,主流方案有XXL-JOB、Elastic-Job、Saturn和ScheduleX等。
|
4月前
|
XML 算法 安全
详解RAG五种分块策略,技术原理、优劣对比与场景选型之道
RAG通过检索与生成结合,提升大模型在企业场景的准确性与安全性。分块策略是其核心,直接影响检索效果与回答质量。本文系统解析五种主流分块方法:固定大小、语义、递归、基于文档结构及LLM分块,对比其优缺点与适用场景,并提出组合优化路径,助力构建高效、可信的RAG系统。
|
4月前
|
消息中间件 人工智能 决策智能
AgentScope x RocketMQ:构建多智能体应用组合
AgentScope是阿里巴巴推出的开发者友好型多智能体框架,支持模块化、可定制的智能体应用开发。通过集成RocketMQ,实现高效可靠的A2A通信,助力构建如“智能旅行助手”等复杂协作场景,提升开发透明度与运行时可控性。(238字)
|
4月前
|
人工智能 JSON 数据挖掘
大模型应用开发中MCP与Function Call的关系与区别
MCP与Function Call是大模型应用的两大关键技术。MCP为模型与外部工具提供标准化通信协议,实现跨模型、跨平台集成;Function Call则是模型调用外部函数的内置机制。前者如“蓝牙协议”,支持多设备互联,后者像“语音助手”,限于单机操作。两者在功能上互补:MCP支持工具热插拔、权限控制与远程调用,适用于企业级复杂系统;Function Call开发简单,适合快速验证单一模型能力。未来趋势将走向融合,形成“模型解析-协议传输-工具执行”的分层架构,推动AI应用生态标准化发展。