Mybatis自定义插件
什么是Mybatis插件:
它是一个拦截器,应用代理模式,在方法级别上进行拦截。
拦截的对象:
我们知道,MyBatis有四大核心对象:
(1)ParameterHandler:处理SQL的参数对象
(2)ResultSetHandler:处理SQL的返回结果集
(3)StatementHandler:数据库的处理对象,用于执行SQL语句
(4)Executor:MyBatis的执行器,用于执行增删改查操作
MyBatis拦截器针对的对象就是上面四大核心对象。
/**
* 自定义插件
* 拦截执行器的方法
* 拦截参数的处理
* 拦截结果集的处理
* 拦截Sql语法构建的处理
*/
@Intercepts({@Signature(
type= Executor.class,
method = "update",
args = {MappedStatement.class,Object.class})})
public class CustomPlugin implements Interceptor {
/**
* 插件运行的代码,它将代替原有的方法
* @param invocation
* @return
* @throws Throwable
*/
@Override
public Object intercept(Invocation invocation) throws Throwable {
System.out.println("开始插入数据");
Object returnObject = invocation.proceed();
System.out.println("插入数据完成");
return returnObject;
}
/**
* 使用JDK的动态代理,给target对象创建一个delegate代理对象,以此来实现方法拦截和增强功能,它会回调intercept()方法。
* @param target
* @return
*/
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
/**
* 配置自定义相关属性
* <plugin interceptor="">
* <property name ="" value =""/>
* </plugin>
* @param properties
*/
@Override
public void setProperties(Properties properties) {
}
}
mybatis-config.xml:
<plugins>
<plugin interceptor="com.example.maybatissource.plugin.CustomPlugin"/>
</plugins>
结果:
源码详解:https://blog.csdn.net/qq_40913932/article/details/113182339