mybatis(1)—逻辑分页和物理分页

Mybatis的分页操作可以分为物理分页和逻辑分页。他们之间有什么区别呢?在什么场景下使用什么样的分页呢?

mybatis(1)—逻辑分页和物理分页_第1张图片
逻辑分页和物理分页的区别

1. Mybatis实现分页的方法

  • 使用RowBounds对象进行逻辑(逻辑内存中)分页,它是针对ResultSet结果集执行的内存分页。
  • 使用pageHelper插件进行物理分页(其实是依赖物理数据库实体)。

2. Mybatis使用pageHelper实现分页的原理

强烈推荐阅读——浅析pagehelper分页原理


   com.github.pagehelper
   pagehelper
   4.1.6

mybatis(1)—逻辑分页和物理分页_第2张图片
Pagehelper的使用

本质上两个知识点:

  1. 将pageNum和pageSize封装为page对象,保存在ThreadLocal中,实现线程间数据隔离。
  2. Pagehelper实现了Mybatis的Interceptor接口,调用拦截StatementHandler(Sql语法的构建处理)方法,按照物理库的不同重构SQL实现分页。

插件拦截的对象:

  1. Executor:拦截执行器的方法(log记录)
  2. StatementHandler:sql语法构建处理
  3. ParameterHandler:拦截参数的处理
  4. ResultSetHandler:拦截结果集的处理

你可能感兴趣的:(mybatis(1)—逻辑分页和物理分页)