Mybatis Plus的插件机制是通过实现Mybatis提供的Interceptor接口来实现的。
Mybatis的Interceptor有以下几种:
- Executor:用于拦截及处理Statement执行。
- ParameterHandler:用于拦截及处理参数,如adding分页参数。
- ResultSetHandler:用于拦截结果集处理。
- StatementHandler:用于拦截Statement的预处理和执行。
- TransactionInterceptor:用于实现事务管理功能。
Mybatis Plus的插件则实现了这些接口中的一个或多个:
public class PaginationInterceptor implements Interceptor {
public Object intercept(Invocation ivk) {
// getMappingStatement 和 MetaObject
// 实现分页逻辑 ..
return invocation.proceed(); // 调用原始方法
}
}
在插件的 intercept 方法中:
- 获取原始调用信息
- 实现自己的业务逻辑,如分页
- 调用 invocation.proceed()执行原始调用
- 返回结果
Mybatis 会在执行 SQL 的不同阶段,调用对应的Interceptor。Mybatis Plus通过实现这些Interceptor,插入自己的逻辑。实现了插件功能。
总的来说,Mybatis Plus的插件机制原理是:
- 实现 Interceptor 接口
- 在对应的阶段,插入自己的业务逻辑
- 调用原始方法
- 返回结果。
通过在 SQL 执行生命周期中加入逻辑,实现了各种插件效果。