Mybatis|Mybatis 插件原理解析
Mybati s作为?个应??泛的优秀的ORM开源框架,这个框架具有强?的灵活性,在四?组件
(Executor、StatementHandler、ParameterHandler、ResultSetHandler)处提供了简单易?的插 件扩展机制。
Mybatis对持久层的操作就是借助于四?核?对象。MyBatis?持?插件对四?核?对象进 ?拦截,对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()); // //这?是每次执?操作的时候,都会进?这个拦截器的?法内Overridepublic Object intercept(Invocation invocation) throws Throwable {//增强逻辑System.out.println("对?法进?了增强....");return invocation.proceed(); //执?原?法}/*** //主要是为了把这个拦截器?成?个代理放到拦截器链中* ^Description包装?标对象 为?标对象创建代理对象* @Param target为要拦截的对象* @Return代理对象*/Overridepublic Object plugin(Object target) {System.out.println("将要包装的?标对象:"+target); return Plugin.wrap(target,this); }/**获取配置?件的属性**///插件初始化的时候调?,也只调??次,插件配置的属性从这?设置进来Overridepublic void setProperties(Properties properties) {System.out.println("插件配置的初始化参数:"+properties ); } }
到此这篇关于Mybatis 插件原理解析的文章就介绍到这了,更多相关Mybatis 插件原理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 做一件事情的基本原理是什么()
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 【读书笔记】贝叶斯原理
- SG平滑轨迹算法的原理和实现
- “写作宝典”《金字塔原理》之读书笔记
- jQuery插件