最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Mybatis插件原理代码示例解析
时间:2022-06-29 02:09:09 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下Mybatis插件原理代码示例解析,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
Mybati s作为⼀个应⽤⼴泛的优秀的ORM开源框架,这个框架具有强⼤的灵活性,在四⼤组件 (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}), 这是拦截的⽅法的⼊参,按顺序写到 这,不要多也不要少,如果⽅法重载,可是要通过⽅法名和⼊参来确定唯⼀的 }) public class MyPlugin implements Interceptor { private final Logger logger = LoggerFactory.getLogger(this.getClass()); // //这⾥是每次执⾏操作的时候,都会进⾏这个拦截器的⽅法内 Override public Object intercept(Invocation invocation) throws Throwable { //增强逻辑 System.out.println("对⽅法进⾏了增强...."); return 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 ); } }
相关文章
- 《无限暖暖》天星之羽获得位置介绍 12-20
- 《流放之路2》重铸台解锁方法介绍 12-20
- 《无限暖暖》瞄准那个亮亮的成就怎么做 12-20
- 《无限暖暖》魔气怪终结者完成方法 12-20
- 《无限暖暖》曙光毛团获得位置介绍 12-20
- 《无限暖暖》日光果获得位置介绍 12-20