MyBatis分页插件使用示例
👉 2025年Java面试宝典网盘下载
(含SpringBoot+分布式+高并发真题)
为什么需要MyBatis分页插件
面试官最爱问:"你们项目怎么处理百万级数据分页?" 直接写limit语句性能差还容易出错。这时候就该MyBatis分页插件出场了——它自动改写SQL语句,像给数据库装了涡轮增压!

主流分页插件对比
-
PageHelper(使用率90%+)
PageHelper.startPage(2, 10); // 魔幻操作!第二页每页10条执行后自动在SQL后追加
LIMIT 10,10 -
MyBatis-Plus分页(SpringBoot亲儿子)
配置个PaginationInterceptor就能让分页查询变简单查询
三步配置PageHelper
-
加依赖(Maven选手看这里)
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.2</version> </dependency> -
配拦截器(MyBatis核心)
<plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> </plugin> </plugins> -
代码实战(面试手写重点!)
// 关键代码!写在查询语句前 PageHelper.startPage(pageNum, pageSize); List<User> users = userMapper.selectAll(); PageInfo<User> pageInfo = new PageInfo<>(users);
高频面试题破解
面试官:"分页插件怎么实现物理分页?"
你:(指着图解释)"通过PageInterceptor拦截SQL,自动拼接方言分页语句,比如MySQL转成LIMIT,Oracle用ROWNUM"
面试官:"遇到多表联查分页怎么办?"
你:"用PageHelper的count子查询优化模式,避免left join导致计数错误"

性能避坑指南
- 千万级数据:禁用
PageHelper的count查询,自定义count语句 - 错误用法:
用List<User> list1 = PageHelper.startPage(1,10).doSelect(()->userMapper.selectA()); List<User> list2 = userMapper.selectB(); // 这里也被分页了!PageHelper.clearPage()清理线程变量
💡 面试技巧:当被问分页优化时,甩出"覆盖索引+延迟关联"组合拳
SELECT * FROM user INNER JOIN ( SELECT id FROM user LIMIT 1000000,10 ) AS tmp USING(id)
真实项目经验
在电商订单查询中,用MyBatis分页插件实现:
- 时间范围筛选 + 订单状态过滤
- 分页性能从3s优化到200ms
- 封装统一分页响应体:
{ "data": [...], "total": 183, "pageSize": 10 }
最后插播福利:
需要面试鸭会员的同学,通过面试鸭返利网找我可返25元!用省下的钱买咖啡刷题更香哦~



