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

news/2025/9/23 21:28:03/文章来源:https://www.cnblogs.com/cabbagehp/p/19108126

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 中获取总记录数、总页数、当前页、是否有下一页等所有分页信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

达成度报告

一、功能设计 1. 课程简介 课程目标、成绩分布、课程目标分值分布、支撑矩阵 2. 基于成绩的统计分析与可视化平时成绩分布(散点图)+ 成绩段分布 期末成绩分布(散点图)+ 成绩段分布 平时与期末差异值的分布(散点图…

金泉网做网站要找谁做网站必须要推广吗

0、怎么写一个前端页面: HTML是超文本标记语言,它用来写前端的内容和框架,CSS是层叠样式表,它用来给前端写样式,让内容变漂亮。1、要写前端页面需要用VScode代码编辑器: VScode当中可以下载汉化插件、快捷键插件(eclipse)浏览器用于解析html/css/js代码,浏览器是从上往…

阜阳网站建设fywzjs做推广哪个网站效果好

大家好,今天为大家带来的是 mysql 5.7 msi , MySql 8.0 版本的下载、安装教程,附详细图文。本文以 5.7 版本为例子,帮助大家讲解。希望对大家有所帮助 文章首发地址 一、下载地址 这里提供一下 CSDN 镜像下载地址,有…

广西网站建设工具建设工程网站贴吧

一:description方法 description有对象方法和类方法两种,(是NSObject类的方法)1,-description(对象方法) 使用NSLog和%输出某个对象时,会调用对象的description方法,并拿…

阿里云需要网站建设方案书网站开发要学的课程

前言 之前虽然单独讲过Security Client和Resource Server的对接,但是都是基于Spring webmvc的,Gateway这种非阻塞式的网关是基于webflux的,对于集成Security相关内容略有不同,且涉及到代理其它微服务,所以会稍微比较麻…

中国建设银行下载官方网站共享门店新增跑腿距离计算优化

随着VR技术的不断进步,VR全景技术已经成为了文化展示和传播的一项重要工具,相较于传统视频、图文等展现方式,VR全景体验更加直观、便捷,其中蕴涵的信息量也更加丰富,这也为公众了解博物馆和历史文化带来了更为深刻的体…

备案期间能否做网站解析wordpress php占内存

尽管BERT为代表的预训练模型大肆流行,但是身处工业界才会知道它落地有多难,尤其是QPS动辄几百的在线推荐、搜索系统,哪怕在大厂也很难在线上系统见到它们。 今天就想反其道而行之,谈谈工业界搜索、推荐、广告这类核心场景中落地能…

零基础建设网站视频wordpress当前页面id

1 引言 在学习前,我想说一句,那就是为什么要学习Java。 每个人的出发点都不同,对于做信息化的工程技术人员来说,java不懂,就没法干项目。 尽管有c和matlab等基础,但java看起来与这些语言都不太一样。 做…

深圳市盐田区住房和建设局网站泽成杭州seo网站推广排名

文章目录 1. 添加动画2. Animation2.1 制作界面2.2 制作好的 Animation 动画2.3 添加和使用事件 3. Animator3.1 制作界面3.2 一些参数解释3.3 动画参数 4. Animator中相关类、属性、API4.1 类4.2 属性4.3 API4.4 几个关键方法 5. 动画播放和暂停控制 1. 添加动画 选中待提添加…

为什么我的网站没有百度索引量国产做爰全免费的视频网站

STM32 在 Windows 上的交叉编译二 调试 在上一篇博客 《在Windows上交叉编译STM32(环境搭建)》 ,已经让 CubeMX 生成的工程成功编译,并下载到板子上了。 这篇博客主要继续介绍接下来的步骤,调试。硬件是使用的 ST-LINK ,别的也无…

旋转图像-leetcode

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1:输入:matrix …

【ChipIntelli 系列】ASR部分——合成语言模型和多网络(多语种)切换

打开 ChipIntelli 的AI开发平台,找到组件开发的语言模型开发。在页面中编辑语料然后下载文件 共有两个文件夹:拷贝两个文件夹下的文件到SDK中 以双网络为例: 如果您使用的是CI130X SDK,请按如下步骤将合成的文件拷…

dots.llm1:小红书开源的 MoE 架构大语言模型 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

哪些ERP系统值得长期使用?2025年最新盘点来了!

哪些ERP系统值得长期使用?2025年最新盘点来了!在数字化转型加速的背景下,企业对ERP系统的依赖日益加深。根据行业调研数据显示,持续应用集成化ERP系统的企业在运营效率、数据准确性和战略决策能力上较传统管理模式有…

商品网站建设设计思路dw怎么做网站

文章目录 一、redis1.1 redis概述1.2 redis安装 二、string2.1 基础命令2.2 存储结构2.3 应用 三、list3.1 基础命令3.2 应用 四、hash4.1 基础命令4.2 存储结构4.3 应用 五、set5.1 基础命令5.2 存储结构5.3 应用 六、zset6.1 基础命令6.2 存储结构6.3 应用 一、redis 1.1 re…

下载网站源码行业网站设计公司

文章来源:http://www.bjfhrd.com 体育木地板上有许多暗门,以制造特殊效果,如火焰、烟雾,使房屋、树木、山或人物在一瞬间出现或销售。这种特殊的要求,对于专业体育木地板德施工就有了一定的要求。 专业体育木地板施工&…

湖南教育平台网站建设查公司注册信息怎么查

转载自 关于SimpleDateFormat时间格式化线程安全问题昨天推送的文章《关于创建和销毁对象》一文中,2.1重复利用对象这一小节所举的SimpleDateFormat格式化时间的例子是不合适的,因为多线程场景下,SimpleDateFormat存在线程安全问题。在此&am…

网站的建设与维护需要资质吗网站设置子目录

HTTP HTTP版本HTTP2和HTTP3区别 HTTP版本 HTTP(超文本传输协议)的发展史可以分为以下几个版本: 1. HTTP/0.9:最初的版本只能传输HTML文本,并且没有header和body,仅支持GET请求。 2. HTTP/1.0&#xff1a…

如何对网站的图片做cdn如何做企业文化培训

1、什么是流 我们可以先想象水流是怎样的?溪水不断流动,最终融入大海;我们今天的学习IO其实如同水流一样,当我们读取文件信息或者写入信息时,如同水流一样,不断读取或者写入,直到业务流程结束。…

个人导航网站怎么备案网站上线准备

本文来自腾讯蓝鲸智云社区用户: CanWay 平台化工程涉及双重核心意义。一方面,是类似利用IDE等工具提高工程师效率的平台化工程,如GitOps或命令行调度般便捷。然而,本文重点探讨的是基于价值流的平台化工程,尤其针对传统金融行业&a…