MyBatis是如何进行分页的?分页插件的原理是什么?

MyBatis是如何进行分页的?分页插件的原理是什么?
MyBatis是如何分页的?
MyBatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
分页插件的原理是什么?
- 分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,拦截Executor的query方法
- 在执行查询的时候,拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
- 举例:
select * from student
,拦截sql后重写为:select t.* from (select * from student) t limit 0, 10
可以看一下一个大概的MyBatis通用分页拦截器: