栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis Plugin拦截器开发过程详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis Plugin拦截器开发过程详解

这篇文章主要介绍了Mybatis Plugin拦截器开发过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.Plugin

MyBatis 允许使用插件来拦截的方法调用包括:

  • • Executor (update, query, flushStatements, commit, rollback,getTransaction, close, isClosed)
  • • ParameterHandler (getParameterObject, setParameters)
  • • ResultSetHandler (handleResultSets, handleOutputParameters)
  • • StatementHandler (prepare, parameterize, batch, update, query)

注意;可以通过插件拦截到这四个对象,修改参数等操作:

你必须要知道的类:

  • org.apache.ibatis.plugin.Plugin
  • org.apache.ibatis.reflection.SystemmetaObject

2.使用步骤

实现 Interceptor 接口

三个方法执行顺序

  • setProperties()
  • plugin()
  • intercept()
FirstIntercepter=====>setProperties
FirstIntercepter====>pluginorg.apache.ibatis.executor.CachingExecutor@64485a47
FirstIntercepter====>pluginorg.apache.ibatis.scripting.defaults.DefaultParameterHandler@2f0a87b3
FirstIntercepter====>pluginorg.apache.ibatis.executor.resultset.DefaultResultSetHandler@4fcd19b3
FirstIntercepter====>pluginorg.apache.ibatis.executor.statement.RoutingStatementHandler@2fd66ad3
DEBUG 09-05 11:56:24,696 ==> Preparing: select * from employee where id=? (baseJdbcLogger.java:159)
FirstIntercepter:===>intercept
DEBUG 09-05 11:56:24,722 ==> Parameters: 1(Integer) (baseJdbcLogger.java:159)
DEBUG 09-05 11:56:24,739 <== Total: 1 (baseJdbcLogger.java:159)
Employee [id=1, lastName=tom, gender=1, email=asd@qq.com, depid=null]

给你的拦截器签名:


@Intercepts({
@Signature(type=StatementHandler.class,
method="parameterize",
args=java.sql.Statement.class
)
})
public class FirstIntercepter implements Interceptor

mybatis-cfg.xml中配置插件

这里注意配置plugins的标签顺序,以免出错,在environments上面







3.多个插件的执行

多个插件依次生成目标对象的代理对象,层层包裹,先声明的先包裹;形成代理链

可以理解为:初始化执行

执行log

FirstIntercepter=====>setProperties

MySecondIntercepter====>setProperties:{param1=root}
FirstIntercepter====>pluginorg.apache.ibatis.executor.CachingExecutor@64485a47
MySecondIntercepter====>plugin:org.apache.ibatis.executor.CachingExecutor@64485a47
FirstIntercepter====>pluginorg.apache.ibatis.scripting.defaults.DefaultParameterHandler@2f0a87b3
MySecondIntercepter====>plugin:org.apache.ibatis.scripting.defaults.DefaultParameterHandler@2f0a87b3
FirstIntercepter====>pluginorg.apache.ibatis.executor.resultset.DefaultResultSetHandler@4fcd19b3
MySecondIntercepter====>plugin:org.apache.ibatis.executor.resultset.DefaultResultSetHandler@4fcd19b3
FirstIntercepter====>pluginorg.apache.ibatis.executor.statement.RoutingStatementHandler@2fd66ad3
MySecondIntercepter====>plugin:org.apache.ibatis.executor.statement.RoutingStatementHandler@2fd66ad3
DEBUG 09-05 12:07:01,928 ==> Preparing: select * from employee where id=? (baseJdbcLogger.java:159)
MySecondIntercepter====>intercept:public abstract void org.apache.ibatis.executor.statement.StatementHandler.parameterize(java.sql.Statement) throws java.sql.SQLException
FirstIntercepter:===>intercept
DEBUG 09-05 12:07:01,954 ==> Parameters: 1(Integer) (baseJdbcLogger.java:159)
DEBUG 09-05 12:07:01,968 <== Total: 1 (baseJdbcLogger.java:159)
Employee [id=1, lastName=tom, gender=1, email=asd@qq.com, depid=null]

4.实现拦截修改参数

sql