美文网首页
PageHelper分页原理

PageHelper分页原理

作者: ChadJ | 来源:发表于2019-11-22 10:13 被阅读0次

PageHelper.offsetPage(PAGE_NUM, PAGE_SIZE)实际做的事情是在 ThreadLocal中设置了分页参数,之后在查询执行的时候,获取当线程中的分页参数,执行查询的时候通过拦截器在sql语句中添加分页参数,之后实现分页查询,查询结束后在 finally 语句中清除ThreadLocal中的查询参数

PageInterceptor

最核心的逻辑在 PageInterceptor 中,PageInterceptor 是一个拦截器。

Mybatis四个拦截机会

  1. Executor
  2. ParameterHandler
  3. ResultSetHandler
  4. StatementHandler

分页插件拦截的是 Executor ,也就是在sql执行的时候

Mybatis插件加载流程

  1. 读取配置文件到Congiguration实例
  2. 生成全局公用的 SqlSessionTemplate以SqlSessionFactory实例
  3. 获取接口的代理对象MapperProxy
  4. 执行增删改查方法

那么在configuration.newExecutor()方法会加载拦截链,也就是PageInterceptor。

注意

PageHelper方法使用了静态的ThreadLocal参数,分页参数和线程是绑定的。

只要你可以保证在PageHelper方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为PageHelper在finally代码段中自动清除了ThreadLocal存储的对象。

相关文章

网友评论

      本文标题:PageHelper分页原理

      本文链接:https://www.haomeiwen.com/subject/nrsfwctx.html