MyBatis分页

简介: 本文介绍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,小数据量效率比逻辑分页慢,但是大数据量推荐用物理分页。物理分页总是优先于逻辑分页。

相关文章
|
7天前
|
消息中间件 人工智能 决策智能
AgentScope x RocketMQ:构建多智能体应用组合
AgentScope是阿里巴巴推出的开发者友好型多智能体框架,支持模块化、可定制的智能体应用开发。通过集成RocketMQ,实现高效、可靠的A2A通信,助力构建如“智能旅行助手”等复杂协作场景,提升开发效率与系统可扩展性。(238字)
|
7天前
|
存储 JSON NoSQL
MongoDB常用命令
本文介绍如何使用MongoDB存储文章评论数据,涵盖数据库与集合的创建、文档的增删改查、批量操作、投影查询、排序分页及更新修饰符等核心操作,帮助快速掌握MongoDB基本用法。
|
7天前
|
NoSQL Linux Shell
MongoDB单机部署
本文介绍MongoDB在Windows与Linux系统的安装启动方法,涵盖下载、解压、配置数据目录与端口,支持命令行和配置文件方式启动服务。详细说明如何通过mongo shell连接数据库,使用Compass图形化工具管理,以及Linux下部署、防火墙配置和安全关闭服务等操作,助你快速搭建MongoDB运行环境,适用于开发与生产场景。
|
7天前
|
缓存 Java 数据库连接
MyBatis常见配置
MyBatis配置优先级:方法参数 > resource/url > properties。支持缓存、延迟加载、自动生成主键等配置,可通过environments配置多环境,默认使用development。事务管理支持JDBC和MANAGED,与Spring集成时由Spring接管事务。
|
7天前
|
XML Java 数据库连接
MyBatis映射关系(1-1 1-n n-n)
本文介绍MyBatis四大关联映射:一对一(字段-属性映射)、一对多(如用户含多个角色,用`<collection>`)、多对一(如博客关联作者,用`<association>`)和多对多(通过中间类实现,如用户与部门)。解决复杂实体关系映射问题,提升数据查询效率与灵活性。
|
7天前
|
SQL 缓存 Java
MyBatis
MyBatis配置优先级:方法参数 > resource/url > properties体内。支持多环境、JDBC/MANAGED事务管理,XML实现一对一、一对多关联映射,分页支持逻辑与物理方式,推荐BatchExecutor批量操作,一级缓存默认开启,二级缓存需手动配置。
|
7天前
|
安全 数据安全/隐私保护 微服务
SpringSecurity权限管理
权限管理涵盖认证与授权,通过ACL、RBAC等模型实现用户身份校验与角色权限分配,构建安全访问控制,保障系统数据与流程安全。
|
7天前
|
人工智能 缓存 NoSQL
AIGC项目
专注AI与高并发架构实战,精通大模型私有化部署、RAG知识库、AIGC生成(文生图/图修复)及Stable Diffusion应用。熟练掌握Spring Cloud微服务、Redis缓存、分库分表、分布式事务与任务调度,具备统一支付、保险系统、派单调度等复杂业务系统设计开发能力。
|
7天前
|
人工智能 NoSQL Java
参考简历模板
项目名称:多领域智能微服务系统 技术架构:SpringBoot + Spring Cloud Alibaba + Spring AI + Nacos + MyBatis + Gateway + Redis + RAG + 知识图谱 项目描述:本系列项目覆盖教育、金融、物流、家政等领域,基于微服务架构融合大模型与AI技术,实现智能推荐、风险控制、路径优化与服务调度。结合RAG、知识图谱、MCP协议及多模态处理,提升系统智能化水平。通过Spring AI对接通义千问,实现语义理解与工具调用。
|
7天前
|
人工智能 NoSQL 前端开发
面试真题
多套AI与Java面试题涵盖RAG、智能体、大模型部署、分布式系统、JVM调优、数据库设计等核心技术,深入考察项目经验、架构能力与技术深度,适用于中高级工程师岗位选拔。