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
备注:分页 + 城市群
加入默语共创社群矩阵
和一群优秀的技术人一起探索科技未来,共同成长