MyBatis-Plus 分页实战指南:三行代码实现高性能分页查询
MyBatis-Plus分页查询只需三行代码即可实现高性能分页。通过创建Page对象、构建查询条件和执行selectPage方法,自动生成LIMIT子句并封装分页结果。文章详细介绍了基础用法、参数含义、前端交互模型以及分页插件的配置方法,并提供了JSON返回示例。MyBatis-Plus的分页功能简化了代码结构,提升了查询可读性和稳定性,是企业级开发的高效工具。文末还提供了获取实战源码和项目模板的
📚 MyBatis-Plus 分页实战指南:三行代码实现高性能分页查询
✍️ 作者:默语 | 微信:Solitudemind
📬 公众号:默语摸鱼

🧭 摘要
在实际项目中,分页查询 几乎是数据库访问的标配场景。如果你还在手写 LIMIT、OFFSET 并处理记录总数,那真的太浪费时间了。MyBatis-Plus 提供了开箱即用的分页能力,只需三行代码,即可实现高性能、易维护的分页查询!
本文将结合实战案例,讲解 Page 对象的使用方式,带你掌握分页查询的完整流程。
🔍 为什么选择 MyBatis-Plus 分页?
- ✅ 无需手写分页 SQL,自动封装
LIMIT和COUNT - ✅
Page对象即结果,也可作为入参 - ✅ 支持泛型返回和自定义条件
- ✅ 与
LambdaQueryWrapper无缝配合
🧩 基础用法:三步走
以下是一个在实际项目中使用分页查询的典型例子:
📁 示例类:PowerGridRiskBookServiceImpl.java
@Override
public Result<?> getPagedRiskBooks(FigurePageVo figurePageVo) {
// 1. 创建分页对象,传入当前页码和每页数量
Page<PowerGridRiskBook> page = new Page<>(figurePageVo.getPage(), figurePageVo.getSize());
// 2. 构建查询条件(这里以 LambdaQueryWrapper 为例)
LambdaQueryWrapper<PowerGridRiskBook> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.eq(figurePageVo.getStatus() != null, PowerGridRiskBook::getStatus, figurePageVo.getStatus())
.like(StringUtils.isNotBlank(figurePageVo.getKeyword()), PowerGridRiskBook::getTitle, figurePageVo.getKeyword());
// 3. 执行分页查询,自动生成 LIMIT 子句
Page<PowerGridRiskBook> resultPage = baseMapper.selectPage(page, queryWrapper);
// 4. 封装并返回分页结果
return Result.success(resultPage);
}
📦 参数解释
| 参数 | 说明 |
|---|---|
figurePageVo.getPage() |
当前页码,例如 1 |
figurePageVo.getSize() |
每页条数,例如 10 |
selectPage(Page, Wrapper) |
核心方法,执行分页并自动添加 LIMIT |
Page.getRecords() |
当前页的数据列表 |
Page.getTotal() |
总记录数 |
Page.getPages() |
总页数 |
✨ 实战补充:前端交互模型 FigurePageVo
分页查询往往与前端配合使用,传参类 FigurePageVo 通常长这样:
@Data
public class FigurePageVo {
private int page; // 当前页码
private int size; // 每页数量
private String keyword; // 模糊搜索关键词
private Integer status; // 筛选状态
}
你可以根据实际业务自由扩展,例如支持排序字段、时间区间等。
🧠 小贴士(Tips)
- 💡 推荐在业务 Service 中封装分页逻辑,Controller 层只负责参数转发;
- 💡
Page<T>既可作为入参也可作为返回值; - 💡 查询条件推荐使用
LambdaQueryWrapper,安全、类型友好; - ⚠️ 记得配置分页插件!
⚙️ 如何启用分页插件
MyBatis-Plus 需要显式注册分页插件,否则分页无效!
@Configuration
@MapperScan("com.example.mapper")
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 数据库类型请根据实际修改
return interceptor;
}
}
🖼️ 分页效果返回结构(JSON)
分页结果将自动封装为如下结构:
{
"code": 200,
"msg": "success",
"data": {
"records": [ ... 当前页的数据 ... ],
"total": 87,
"size": 10,
"current": 1,
"pages": 9
}
}
非常适合前端组件如 Element-UI 的表格组件进行绑定展示。
✅ 总结
一句话总结分页用法:
只需 new 一个 Page 对象,搭配 selectPage 和条件构造器,分页查询就这么简单!
在实际开发中,MyBatis-Plus 的分页能力将极大地简化你的代码结构,同时增强查询的可读性与稳定性,是构建中后台系统不可或缺的利器。
📎 拓展阅读
🎁 获取 MyBatis-Plus 分页实战源码 + 项目模板
扫码添加默语微信 Solitudemind,回复关键词 分页资料包,即可获取:
- 🔹 企业级分页封装模板
- 🔹 分页 + 模糊搜索 + 动态排序综合示例
- 🔹 可直接使用的分页返回结果封装类
👇 添加微信,一起进群摸鱼学习 👇
微信号:
Solitudemind
备注:分页 + 城市群
📢 加入默语共创社群矩阵
和一群优秀的技术人一起探索科技未来,共同成长 🚀
更多推荐




所有评论(0)