加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

简朴相识mybatis拦截器实现道理及实例

发布时间:2020-10-31 19:09:38 所属栏目:站长百科 来源:网络整理
导读:这篇文章首要先容了简朴相识mybatis拦截器实现道理及实例,文中通过示例代码先容的很是具体,对各人的进修可能事变具有必然的参考进修代价,必要的伴侣可以参考下
三个焦点要领都加了具体的注释,并且团结案例需求声名题目

那么多笔墨不想行看,不要紧有归纳综合

总结:

1.在mybatis中可被拦截的范例有四种(凭证拦截次序):

Executor:拦截执行器的要领。

ParameterHandler:拦截参数的处理赏罚。

ResultHandler:拦截功效集的处理赏罚。

StatementHandler:拦截Sql语法构建的处理赏罚。

2.各个参数的寄义:

@Intercepts:标识该类是一个拦截器;

@Signature:指明自界说拦截器必要拦截哪一个范例,哪一个要领;

2.1 type:对应四种范例中的一种;

2.2 method:对应接口中的哪类要领(由于也许存在重载要领);

2.3 args:对应哪一个要领;

不知道可否辅佐你领略,我的表达手段有限~~~

接下来我们看看 Plugin 类

package org.apache.ibatis.plugin;

* Plugin 类着实就是一个署理类,由于它实现了jdk动态署理接口 InvocationHandler

* 我们焦点只必要存眷两个要领

* wrap:

* 假如看懂了代码案例1的例子,那么这个要领很领略,这个要领就是 mybatis 提供应开拓职员行使的一个器材类要领,

* 目标就是辅佐开拓职员省略掉 反射理会注解 Intercepts 和 Signature,有乐趣的可以去看看源码 Plugin#getSignatureMap 要领

* invoke:

* 这个要领就是按照 wrap 要领的理会功效,判定当前拦截器是否必要举办拦截,

* 假如必要拦截:将 方针工具+方针要领+方针参数 封装成一个 Invocation 工具,给我们自界说的拦截器 MyInterceptor 的 intercept 要领

* 这个时辰就恰恰对应上了上面案例1中对 intercept 要领的表明白,它就是我们要处理赏罚本身逻辑的要领,

* 处理赏罚好了之后是否必要挪用方针工具的要领,好比上面说的 打印了sql语句,是否还要查询数据库呢?谜底是必定的

* 假如不必要拦截:则直接挪用方针工具的要领

* 好比直接挪用 Executor 的 update 要领举办更新数据库

class Plugin implements InvocationHandler {

public static Object wrap(Object target, Interceptor interceptor) {

// 省略

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

// 省略

}

贴一段网上的通用表明吧:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读