86-说说MyBatis分页插件的原理是什么?

首先,在MyBatis内部定义了一个拦截器接口

所有的插件都要实现该接口,来,我们看看这个接口的定义

1
2
3
4
5
6
7
8
9
public interface Interceptor {

Object intercept(Invocation invocation) throws Throwable;

Object plugin(Object target);

void setProperties(Properties properties);

}

那么其中一个关键的方法就是intercept,从而实现拦截

分页插件的原理就是使用MyBatis提供的插件接口,实现自定义插件,在插件的拦截方法内,拦截待执行的SQL,然后根据设置的dialect(方言),和设置的分页参数,重写SQL ,生成带有分页语句的SQL,执行重写后的SQL,从而实现分页

所以原理还是基于拦截器