Mybatis 插件原理解析

网友投稿 682 2022-12-02

Mybatis 插件原理解析

Mybatis 插件原理解析

Mybati s作为⼀个应⽤⼴泛的优秀的ORM开源NGrdQpeb框架,这个框架具有强⼤的灵活性,在四⼤组件

(Executor、StatementHandler、ParameterHandler、ResultSetHandler)处提供了简单易⽤的插 件扩展机制。

Mybatis对持久层的操作就是借助于四⼤核⼼对象。MyBatis⽀持⽤插件对四⼤核⼼对象进 ⾏拦截,对mybatis来说

插件就是-,⽤来增强核⼼对象的功能,增强功能本质上是借助于底层的 动态代理实现的,换句话说,

MyBatis中的四⼤对象都是代理对象

MyBatis所允许拦截的⽅法如下:

执⾏器Executor (update、query、commit、rollback等⽅法);

SQL语法构建器StatementHandler (prepare、parameterize、batch、updates query等⽅法);

参数处理器ParameterHandler (getParameterObject、setParameters⽅法);

结果集处理器ResultSetHandler (handleResultSets、handleOutputParameters等⽅法);

在四⼤对象创建的时候

每个创建出来的对象不是直接返回的,⽽是interceptorChain.pluginAll(parameterHandler);

获取到所有的Interceptor (-)(插件需要实现的接⼝);调⽤ interceptor.plugin(target);返回

target 包 装后的对象

插件机制,我们可以使⽤插件为⽬标对象创建⼀个代理对象;AOP (⾯向切⾯)我们的插件可 以为四⼤对象

创建出代理对象,代理对象就可以拦截到四⼤对象的每⼀个执⾏;

自定义插件拦截:

Intercepts ({//注意看这个⼤花括号,也就这说这⾥可以定义多个@Signature对多个地⽅拦截,都⽤这个-

@Signature (type = StatementHandler .class , //这是指拦截哪个接⼝

method = "prepare",//这个接⼝内的哪个⽅法名,不要拼错了

args = { Connection.class, Integer .class}), 这是拦截的⽅法的⼊参,按顺序写到

这,不要多也不要少,如果⽅法重载,可是要通过⽅法名和⼊参来确定唯NGrdQpeb2032;的

})

public class MyPluginNGrdQpeb implements Interceptor {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

// //这⾥是每次执⾏操作的时候,都会进⾏这个-的⽅法内

Override

public Object intercept(Invocation invocation) throws Throwable {

//增强逻辑

System.out.println("对⽅法进⾏了增强....");

retuNGrdQpebrn invocation.proceed(); //执⾏原⽅法

}

/**

* //主要是为了把这个-⽣成⼀个代理放到-链中

* ^Description包装⽬标对象 为⽬标对象创建代理对象

* @Param target为要拦截的对象

* @Return代理对象

*/

Override

public Object plugin(Object target) {

System.out.println("将要包装的⽬标对象:"+target);

return Plugin.wrap(target,this);

}

/**获取配置⽂件的属性**/

//插件初始化的时候调⽤,也只调⽤⼀次,插件配置的属性从这⾥设置进来

Override

public void setProperties(Properties properties) {

System.out.println("插件配置的初始化参数:"+properties );

} }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:CSS的优先级
下一篇:设计模式学习笔记——面向对象设计原则
相关文章

 发表评论

暂时没有评论,来抢沙发吧~