逻辑分页和物理分页的区别Mybatis的分页操作可以分为物理分页和逻辑分页。他们之间有什么区别呢?在什么场景下使用什么样的分页呢?
1. Mybatis实现分页的方法
- 使用RowBounds对象进行逻辑(逻辑内存中)分页,它是针对ResultSet结果集执行的内存分页。
- 使用pageHelper插件进行物理分页(其实是依赖物理数据库实体)。
2. Mybatis使用pageHelper实现分页的原理
强烈推荐阅读——浅析pagehelper分页原理
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
Pagehelper的使用
本质上两个知识点:
- 将pageNum和pageSize封装为page对象,保存在ThreadLocal中,实现线程间数据隔离。
- Pagehelper实现了Mybatis的Interceptor接口,调用拦截StatementHandler(Sql语法的构建处理)方法,按照物理库的不同重构SQL实现分页。
插件拦截的对象:
- Executor:拦截执行器的方法(log记录)
- StatementHandler:sql语法构建处理
- ParameterHandler:拦截参数的处理
- ResultSetHandler:拦截结果集的处理
网友评论