📚 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
备注:分页 + 城市群


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

👉 点击此处,加入核心学习团队

更多推荐