mybatis 插件开发

double

记录一下 MyBatis 插件开发机制

代码实现

@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})}) public class MyPlugin implements Interceptor { Properties props = null; /** * 代替拦截对象方法的内容 * @param invocation 责任链对象 * @return * @throws Throwable */ @Override public Object intercept(Invocation invocation) throws Throwable { System.err.println("before....."); /** * 如果当前代理的是一个非代理对象,那么它就回调用真实拦截对象的方法,如果不是它会调度下个插件代理对象的 invoke 方法 */ Object obj = invocation.proceed(); System.err.println("after....."); return obj; } /** * 生成对象的代理,这里常用 MyBatis 提供的 Plugin 类的 wrap 方法 * @param target 被代理的对象 * @return */ @Override public Object plugin(Object target) { // 使用 MyBatis 提供的 Plugin 类生成代理对象 System.err.println("调用生成代理对象"); return Plugin.wrap(target, this); } /** * 获取插件配置的属性,我们在 MyBatis 的配置文件里面去配置 * @param properties 是 MyBatis 配置的参数 */ @Override public void setProperties(Properties properties) { System.err.println(properties.get("dbType")); this.props = properties; } }

配置

开发完成后需要在 MyBatis 配置文件里面配置才能够使用插件

<plugins> <plugin interceptor="com.isyxf.mybatis.plugs.MyPlugin"></plugin> </plugins>

扩展阅读