MyBatis-Plus 分页实战指南:三行代码实现高性能分页查询 - 实践

MyBatis-Plus 分页实战指南:三行代码实现高性能分页查询

✍️ 作者:默语 | 微信:Solitudemind
公众号:默语摸鱼


在这里插入图片描述

摘要

在实际项目中,分页查询 几乎是数据库访问的标配场景。如果你还在手写 LIMITOFFSET 并处理记录总数,那真的太浪费时间了。MyBatis-Plus 提供了开箱即用的分页能力,只需三行代码,即可实现高性能、易维护的分页查询!

本文将结合实战案例,讲解 Page 对象的使用方式,带你掌握分页查询的完整流程。


为什么选择 MyBatis-Plus 分页?

  • ✅ 无需手写分页 SQL,自动封装 LIMITCOUNT
  • 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
备注:分页 + 城市群


加入默语共创社群矩阵
和一群优秀的技术人一起探索科技未来,共同成长

点击此处,加入核心学习团队
posted @ 2025-08-08 10:06  yfceshi  阅读(41)  评论(0)    收藏  举报