-
插件介绍
插件本质上是拦截器,实现原理是动态代理,多个拦截还涉及到责任链设计模式。
ParameterHandler:处理SQL的参数对象
ResultSetHandler:处理SQL的返回结果集
StatementHandler:数据库的处理对象,用于执行SQL语句
Executor:MyBatis的执行器,用于执行增删改查操作
-
插件使用
1、定义一个拦截器,注解上标明要拦截的类和方法
1.1 写上拦截的步骤
1.2 ⽣成target的代理对象
1.3 获取配置
-
插件原理
原理:
MyBatis定义了拦截器对下面的四个类进行拦截(增强),拦截的方式是动态代理。
执⾏器Executor (update、query、commit、rollback等⽅法);
SQL语法构建器StatementHandler (prepare、parameterize、batch、updates query等⽅ 法);
参数处理器ParameterHandler (getParameterObject、setParameters⽅法);
结果集处理器ResultSetHandler (handleResultSets、handleOutputParameters等⽅法)
以ParameterHandler为例,创建的时候对其调用pluginAll方法,依次调用每个拦截器的plugin返回代理后的对象。最后执行的时候看这个代理对象有没有拦截器,有就代理对象的方法,代理对象方法一般会先执行完自己的逻辑,再执行默认方法,没有就只执行原来的方法。
网友评论