Mybatis插件开发原理
2017-10-19 00:00
393 查看
Mybatis插件说明
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 的发行包中的源代码。 假设你想做的不仅仅是监控方法的调用,那么你应该很好的了解正在重写的方法的行为。 因为如果在试图修改或重写已有方法的行为的时候,你很可能在破坏 MyBatis 的核心模块。 这些都是更低层的类和方法,所以使用插件的时候要特别当心。
通过 MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定了想要拦截的方法签名即可。
// ExamplePlugin.java @Intercepts({@Signature( type= Executor.class, method = "update", args = {MappedStatement.class,Object.class})}) public class ExamplePlugin implements Interceptor { public Object intercept(Invocation invocation) throws Throwable { return invocation.proceed(); } public Object plugin(Object target) { return Plugin.wrap(target, this); } public void setProperties(Properties properties) { } }
@Intercepts注解表明该类是拦截器,参数是方法签名数组。
@Signature注解是方法签名参数分别是:
type,表示要拦截的接口类型
method,表示拦截接口下的方法
args,表示方法参数
主要在
intercept方法中编写插件逻辑,通过该方法的参数invocation,可以获取调用的方法名和参数对象。
plugin方法主要是对目标对象的包装。
setProperties方法会读取
mybatis-config.xml插件配置中设置的属性。
<!-- mybatis-config.xml --> <plugins> <plugin interceptor="org.mybatis.example.ExamplePlugin"> <property name="someProperty" value="100"/> </plugin> </plugins>
上面的插件将会拦截在 Executor 实例中所有的 “update” 方法调用, 这里的 Executor 是负责执行低层映射语句的内部对象。
推荐一款动态添加日期的插件
dynamic-add-date是基于Mybatis插件原理开发的可以动态在
Insert和
UpdateSql语句中添加日期列和对应的值的插件,并且支持批量插入和批量更新。
详细介绍可以进入以上链接。
参考
http://www.mybatis.org/mybatis-3/zh/configuration.html#plugins相关文章推荐
- Mybatis插件开发原理
- Android中微信抢红包插件原理解析和开发实现
- DNA JQuery Framework的解析原理和插件开发
- MyBATIS中的插件原理和应用
- Mybatis插件原理分析(三)分页插件
- 由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理
- Android中微信抢红包插件原理解析和开发实现
- Mybatis插件原理
- Mybatis3.4.x技术内幕(十九):Mybatis之plugin插件设计原理
- 【Mybatis】深入浅出MyBatis(5)-插件原理
- Android"挂逼"修炼之行---支付宝蚂蚁森林能量自动收取插件开发原理解析
- 深入理解mybatis原理(十) Mybatis插件原理简单分析
- 由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理
- 【插件开发】—— 11 窃听风云(Java事件监听原理-GEF实例讲解)
- 深入浅出Mybatis-插件原理
- 深入理解mybatis原理(十一) Mybatis插件原理之实现细节
- 【MyBatis源码分析】插件实现原理
- eclipse maven 搭建 SSM(Spring+SpringMVC+MyBatis)开发环境 和 MyBatis 自动生成的 maven 插件配置
- 【Mybtais】Mybatis 插件 Plugin开发(一)动态代理步步解析