尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

MyBatis分页的原理和分页插件的原理是什么

MyBatis分页的原理和分页插件的原理是什么
📅 发布时间:2026/6/18 17:16:28

1、mybatis的分页
MyBtis本身不提供自动化分页,MyBatis 原生分页的本质,就是通过在 SQL 语句中直接使用数据库特定的分页关键字(如 LIMIT, ROWNUM)来实现的。这是一种物理分页,即数据库只返回查询结果中的一部分数据。
2、分页插件的原理
最著名的就是PageHelper,以这个来说
核心思想: 在 MyBatis 执行 SQL 语句之前,由插件“拦截”下来,对原 SQL 进行“改造”,自动添加上分页子句,并同时执行一条计数 SQL。
步骤一:PageHelper.startPage(1, 10)

插件会将一个 Page 对象(包含页码、页大小等信息)存储到当前线程的 ThreadLocal 变量中。ThreadLocal 保证了每个线程的分页参数互不干扰,这在Web应用中至关重要(每个请求是一个独立线程)。

步骤二:执行查询 userMapper.selectAllUsers()

MyBatis 开始执行这条查询语句。

当执行到创建 Statement 的时候,分页插件的拦截器会生效。

拦截器从当前线程的 ThreadLocal 中获取到之前设置的 Page 对象。如果存在,则说明这个查询需要分页。

步骤三:SQL 改造与执行

Dialect(数据库方言): 插件会根据配置的数据库类型(如 MySQL, Oracle)选择对应的“方言”实现。

改造数据查询 SQL: 拦截器会把你写的原始 SQL(SELECT * FROM user)拼接上分页子句。例如,对于 MySQL,会改造成:

SELECT * FROM user LIMIT 0, 10
执行计数 SQL: 为了得到总记录数,插件还会自动生成一条对应的 COUNT 查询语句并执行。例如:

SELECT COUNT(0) FROM user
插件会把这个总数设置回 Page 对象。

步骤四:清理 ThreadLocal

查询执行完毕后,插件会自动清理掉 ThreadLocal 中的分页参数,避免影响后续的无分页查询。这就是为什么要求 PageHelper.startPage() 后必须紧跟查询语句的原因。

步骤五:返回结果

最终,userList 拿到的已经是分页后的结果(只有10条数据)。

用 PageInfo 包装这个 List 后,你可以轻松地从 pageInfo 中获取总记录数、总页数、当前页、是否有下一页等所有分页信息。

相关新闻

  • 旋转图像-leetcode
  • 哪些ERP系统值得长期使用?2025年最新盘点来了!
  • 2025年9月23日 - 20243867孙堃2405

最新新闻

  • 如何免费搭建个人专属媒体中心?Jellyfin完整使用指南
  • SST39VF/LF并行NOR Flash在嵌入式低功耗高可靠系统中的应用与实战
  • UniMark:自回归图像生成模型中的统一自适应多比特水印技术解析
  • 2026恩施防水补漏靠谱服务商盘点:屋面/厨卫/外墙/地下室渗水维修详解,适配武陵山区清江沿岸峡谷雾天山体渗水防潮甄选指南 - 宅安选房屋修缮
  • 计算机Django毕设实战-基于 Django 的校园智能点餐服务系统的设计与实现 基于 Django 的餐饮在线点餐管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 解锁Office潜能:用Office RibbonX Editor打造个性化功能区界面

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号