mybatis分页插件的原理:

mybatis分页插件的原理:

MyBatis分页插件的原理是在 SQL 执行前插入分页代码,生成对应的分页SQL,从而实现分页查询。具体而言,当使用MyBatis 进行具体而言,当使用 MyBatis 进行分页查询时,MyBatis 会通过拦截器的方式,在 SQL 执行前将分页参数(当前页、每页显示多少条数据等)注入到 SQL 语句中。这个过程是在 Executor 的 query 方法中完成的。在 query 方法中,MyBatis 会通过反射获取当前查询语句对应MappedStatement 对象,并将这个对象传递给拦截器,拦截器在处理前对 SQL 语句进行修改。

分页的基本方法是将地址空间等分成某一个固定大小的页;每一页大小由硬件来决定,或者是由操作系统来决定(如果硬件支持多种大小的页)。

  • 1.将进程的逻辑地址空间分成若干个大小相等的片,称为页面或页
  • 2.内存空间分成与页大小相等的若干个存储块,称为物理块或页框
  • 3.在为进程分配内存时,以块为单位,将进程中的若干页分别装入多个可以不相邻的块中

关于进程分页,当我们把进程的虚拟地址空间按页来分割,常用的数据和代码会被装载到内存;暂时没用到的是数据和代码则保存在磁盘中,需要用到的时候,再从磁盘中加载到内存中即可.\

第三步:需要将查询结果强制转换为Page类型

PageHepler.startPage()方法中的两个参数,分别是页码(page)、每页显示条数(pageSize)

注意:查看SQL日志,可以看到分页插件的实现也是使用limit关键字,所以千万不要再StuMapper对应的select查询语句后面加分号(;),因为分号表示SQL语句结束,此时插件再在后面附加limit限制语句就会报错。Mapper.xml文件中定义SQL语句片段,里面的SQL语句也不能加分号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 是一个持久层框架,它提供了丰富的 SQL 映射配置和执行功能,但是在处理大量数据时,如果没有分页机制,就会带来性能问题。 MyBatis 分页插件就是为了解决这个问题而被开发出来的,它可以通过拦截 Executor 中的 query 方法,实现 SQL 语句的自动分页,并将分页后的结果返回给调用方。 下面是 MyBatis 分页插件原理: 1. 定义分页插件 首先,我们需要定义一个分页插件,这个插件需要实现 Interceptor 接口,并且重写其 intercept 方法,该方法会在 Executor 中的 query 方法被调用时被触发。 2. 拦截 query 方法 在 intercept 方法中,我们需要拦截 Executor 中的 query 方法,并获取其中的参数和 SQL 语句。 3. 自动分页 在获取到参数和 SQL 语句后,我们需要对 SQL 语句进行处理,将其转化为分页 SQL 语句,这里需要根据不同的数据库类型来进行处理。 4. 执行 SQL 语句 处理完分页 SQL 语句后,我们需要调用 Executor 中的 query 方法来执行 SQL 语句,并获取分页后的结果。 5. 将结果返回给调用方 最后,我们需要将分页后的结果返回给调用方,这里需要注意一点,即在调用方使用分页插件时,需要在 SQL 语句中加入类似 “limit 0,10” 这样的分页参数,这样才能正确的分页。 总的来说,MyBatis 分页插件原理就是通过拦截 Executor 中的 query 方法,将 SQL 语句转化为分页 SQL 语句,并执行该语句,最后将分页后的结果返回给调用方。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值