关于pagehelper的几点

本文详细介绍了PageHelper在Mybatis中的基本逻辑,包括如何处理分页查询、为何只对紧跟startPage的第一条SQL起作用的问题,以及解决办法。同时,解释了经过分页插件拦截后,Mapper返回的是Page对象,内容为ArrayList。文中还提到了官方文档的参考内容,指导读者如何正确使用PageHelper分页插件。
摘要由CSDN通过智能技术生成

关于pagehelper的几点

基本逻辑

startpage设置threadlocal里的page对象
检查是否需要跳过分页逻辑skip()方法,再检查是否进行count查询
进行总数查询(如果有_COUNT的sql则直接执行,没有就手动生成一个mapstatement),然后设置总数page.setTotal(count);
进行分页查询,查到的结果addall到page实例上
然后返回给mybatis,最后有个finally方法里清空threadlocal里的page对象

以上流程对应的PageHelper的数据库方言包装的流程:

  • beforeCount : 是否需要查总数
  • getCountSql : 生成count sql ,交由ExecutorUtil.executeAutoCount()执行
  • afterCount : 设置page.setTotal(count)
  • beforePage : ExecutorUtil.pageQuery()方法里,调用此方法判断是否需要分页查询
  • getPageSql : ExecutorUtil.pageQuery()方法里,调用此方法生成page sql并执行得到结果list
  • afterPage : 设置分页查询结果list, page.addAll(pageList),根据情况再次设置setTotal()
  • afterAll : 目前无现

PageInterceptor dialect属性其实就是PageHelper,
intercept(Invocation invocation)内部逻辑
1、dialect就是pageHelper负责模板流程
2、Executor executor = (E

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值