首页 > 编程源码 > Mybatis插件实现原理,Mybatis就要这么用

Mybatis插件实现原理,Mybatis就要这么用

楼主:安仁轩 [3级] · 2020-5-13 ·  浏览1138 · 编程源码 · ID:


大家好这里是安仁轩

该文章转自互联网

原创作者:Java_Cappuccino

mybatis中的插件,也就是拦截器interceptor,也挺有意思的。

它的简单使用,就直接拿文档中的示例来简单说下


一、使用
使用方式很简单

Copy// 使用这个注解,表明这是一个拦截器

然后如果是xml配置的话

Copy





如果是 SpringBoot的话,应该是配合自动配置使用,将上面的类使用@Component注解,交由Spring容器管理,然后注册到mybatis的InterceptorChain

mybaits目前支持拦截的类和方法,有下面这些

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



- 版权声明 - 1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者安仁轩流星社区的同意;
3、备注原文地址:https://bbs.liuxingw.com/t/28486.html,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知我们,我们将及时予以处理。
16条回复 |  最后回复于2020-5-13

安仁轩 [3级]

二、实现原理
有可能从上面的使用猜出来它的拦截器的实现原理,那就是动态代理的方式,只不过mybatis这里并不是很直接的来使用代理,绕了个弯,于是给人感觉特别晕,也说不好这个实现是不是有些问题
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

安仁轩 [3级]

就先从Executor说起吧

我们从SqlSessionFactory获取一个SqlSession时,会创建一个新的Executor实例,这个实际的创建动作在这里
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

安仁轩 [3级]

InterceptorChain是一个管家,有点类似于FilterChain,但是注意,其实差别非常的大
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

安仁轩 [3级]

Interceptor是一个接口,也就是mybatis直接暴露给用户使用的需要用户实现的拦截器接口

着重看下一第二张图
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

安仁轩 [3级]

到这里就说完了mybatis插件的实现原理

整体实现其实也很简单,我们想给那个类的哪个方法拦截一下,把实现拦截器,然后配置下要拦截的信息,之后mybatis给我们生成一个动态代理对象,就可以了。
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

[]

???
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

安仁轩 [3级]

怎么了
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

Dream.北陌 [3级]

回归团队不
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

[]

[haha][haha]
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...

[]

青铜这么用 白银这样用 王者笑了
发布于2020-5-13

回复列表

  • 内容加载中...

说点什么...
登录注册 后才可进行评论
签到
25人签到
已签0天
  • 46572帖子
  • 1936242热点量
  • 184728火热值