Mybatis 插件原理
Mybatis是我们平时常用的ORM框架,它很灵活,在灵活的基础上,我们还可以开发一些Mybatis的插件来实现自己想要的功能。
一起来看下Mybatis插件开发的原理
预备知识
- JDK的动态代理 Proxy,InvocationHandler
- 了解Mybatis的基本使用
分析
-
Mybatis的Configuration对象,存储了mybatis的配置信息,在内部多个地方都可以看到Configuration的影子,这是一个非常重要的对象,在追踪源码的时候可以看到Mybatis插件生效的地方。
image.png
通过Configration对象,我们看出可以拦截的对象有
- ResultSetHandler
- Executor
- StatementHandler
- ParameterHandler
-
我们看下interceptorChain.pluginAll的内容。
image.png
- 再看下Interceptor接口的内容
public interface Interceptor { // Object intercept(Invocation invocation) throws Throwable; Object plugin(Object target); void setProperties(Properties properties); } // 拦截器的Invocation参数,内部可以封装了target,method, args. public class Invocation { private final Object target; private final Method method; private final Object[] args; public Invocation(Object target, Method method, Object[] args) { this.target = target; this.method = method; this.args = args; } ... public Object proceed() throws InvocationTargetException, IllegalAccessException { return method.invoke(target, args); } }
- 插件的用法,一般的使用方式为
- Plugin.wrap内部实现,利用JDK的Proxy实现,参考Java使用Porxy和InvocationHandler实现动态代理
invoke方法中,内部interceptor.intercept(new Invocation(target,method,args))。可以照应开始的Interceptor的接口。
- Plugin类内部实现了很多有用的工具方法,Interceptor借助Plugin来实现,其内部的方法可以多看一下。
最后
插件的内部实现,看Mybatis的源码就明白怎么回事,其余的再自己内部追踪下。
参考

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
GIT: 分布式开发 代码管理工具使用命令大全
代码管理工具: GIT 什么是GIT? Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目 Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。 特点: 可以管理各种项目,特别是代码项目,多使用在Linux、Unix系统中 是分布式管理,不同于集中管理,这是git和svn的核心区别 更好的支持分支 拥有全球唯一的版本号 代码安全性更加有保证 开源、方便、快捷、数据传输速度更快、可以无网络操作 集中式和分布式: 集中式: 代码集中管理,需要上传到中央服务器,妹妹吃更新都从中央服务器下载 分布式: 每个节点都保存完整代码,没有中央服务器,节点之间相互推送下载完整代码 GIT安装: Linux: gap-get install git 配置: 配置工具: git config 配置级别: 1.系统中所有用户都会使用这个配置 /etc/gitconfig 文件 配置姓名: gie config --system user.name Paris 配置邮箱: sudu git config --system user.email 1...
- 下一篇
SQL Serever学习15——进阶
特别说明:在sqlserver2014中,不区分大小写,也就是说,SQL是大小写不敏感的 数据库模型3类: 层次模型 网状模型 关系模型 关系型数据库语言3种: DDL数据定义语言 CREATE(创建书库或数据库对象) , ALTER, DROP DML数据操作语言 SELECT(检索表或视图) , UPDATE , INSERT , DELETE DCL数据控制语言 GRANT(授予权限) , REVOKE(撤销权限) , DENY(拒绝权限,并禁止从其他角色继承许可权限) 系统数据库4个: master数据库 记录所有系统信息,例如登录账户,系统配置 model数据库 所有数据库模板,对model数据库修改将应用于以后的所有数据库 msdb数据库 tempdb数据库 模板浏览器窗口 SSMS提供了大量的包含用户提供给的遍的参数的脚本模板,使用该参数可以只输入一次名称,然后自动将改名称复制到脚本中所有必要的位置。 使用模板创建数据库 将Create Database从模板浏览器窗口,拖动到查询窗口,自动创建代码 选择查询==》指定模板参数的值, 在打开的窗口中替换掉原先的值,改...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境