MyBatis 提供的插件机制允许我们在 SQL 被执行的过程中监听并做相应处理,主要解决以下问题:
- 审计 SQL 语句及参数。
- 为 SQL 添加分页、缓存、参数绑定等功能。
MyBatis 插件机制主要步骤:
- 实现 Interceptor 接口。
public interface Interceptor {
Object intercept(Invocation invocation) throws Throwable;
}
- 在 mybatis-config.xml 中注册插件。
<plugins>
<plugin interceptor="com.mybatis.plugin.MyInterceptor">
</plugin>
</plugins>
- 在插件类中实现方法。
public Object intercept(Invocation invocation) throws Throwable {
// 执行原始的方法
Object returnValue = invocation.proceed();
// 额外的处理逻辑
return returnValue;
}
- 通过 Invocation 对象获得 SQL、参数等信息。
- 并对 SQL 进行改写后再执行。
MyBatis 支持 8 个插件点:
- interceptor:SQL 执行前后
- executor:SQL 执行前后的事务处理
- statementHandler:参数处理及结果集映射
- …
因此,插件机制可以:
- 非侵入的改写 SQL 和参数
- 在 SQL 执行的生命周期的不同阶段侦听事件