您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
MyBatis配置文件解析探究
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
MyBatis配置文件解析探究
自猿其说Tech
2021-12-06
IP归属:未知
1353浏览
计算机编程
### 1 简介 MyBatis是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射, 它可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。基于此大多数项目中使用mybatis作为持久层框架,本文主要探究mybatis对配置文件解析的源码实现。 ### 2 MyBatis配置解析 - MyBatis配置文档的顶层结构如下: - configuration(配置) - properties(属性) - settings(设置) - typeAliases(类型别名) - typeHandlers(类型处理器) - objectFactory(对象工厂) - plugins(插件) - environments(环境配置) - databaseIdProvider(数据库厂商标识) - mappers(映射器) 对于配置文件的解析首先会加载为InputStream流,之后调用new SqlSessionFactoryBuilder().build(inputStream)进行加载,首先会解析出configuration节点的内容,之后依次解析各个节点,具体过程如下图。     #### 2.1 properties(属性) 设置一些属性,可以在整个配置文件中用来替换需要动态配置的属性值 ,这些属性我们可以在外部文件写好引入,可以在properties的子属性标签内定义,还可以在加载配置文件的构造函数入参传入。 通过源码可以看到属性信息是通过propertiesElement方法来解析的。  可以看出这几种方式的优先级是:方法参数传递 >外部文件>元素体内指定。其中外部指定的名称可以是“resource”或者“url”,但是不能同时存在。 #### 2.2 settings(设置) settings主要设置MyBatis的一些行为,具体每个参数设置的意义可以参阅文末的官方说明链接。对于settings的解析分为了两个方法实现,loadCustomVfs解析解析自定义 VFS 的实现的类的设置,settingsElement实现其余的设置解析。   #### 2.3 typeAliases(类型别名) 类型别名可为 Java 类型设置一个缩写名字,它仅可以用于 XML 配置。通过typeAliasesElement方法来解析别名配置。   从上述实现可以看出解析出来的类型别名信息会存放到TYPE_ALIASES中,这是一个map类型的数据结构。此外MyBatis中那些默认的类型别名是在TypeAliasRegistry类的构造函数中存入进去的。  #### 2.4 typeHandlers(类型处理器) 类型处理器 用来将数据库查询的结果转换为Java对应的类型,通过typeHandlerElement方法解析该配置。   解析出来的结果存入定义好的map结构中,MyBatis中默认的类型处理器是在TypeHandlerRegistry的构造函数中存入的。  #### 2.5 objectFactory(对象工厂) 对象工厂用来完成对象的实例化工作 ,通过objectFactoryElement方法解析该配置  ##### 2.6 plugins(插件) 对于MyBatis插件配置的解析通过pluginElement方法实现。  #### 2.7 environments(环境配置) 对于环境变量的配置解析通过environmentsElement方法实现。   从上述实现可以看出只有default属性定义的环境配置才会被解析。 #### 2.8 databaseIdProvider(数据库厂商标识) 对于数据库厂商标识的配置解析通过databaseIdProviderElement方法实现。  ##### 2.9 mappers(映射器) 对于mapper映射器的配置解析通过mapperElement方法实现。   从上述实现可以看出对于mapper各种配置的优先级是:package>resource>url>class,并且每个mapper标签只能配置一种。 ### 3 小结 以上是MyBatis对于配置文件的解析具体实现,通过探究我们了解了那些有多种配置方式的具体实现及优先级,在后续遇到配置不生效的情况时可以对照查看其配置方式。根据MyBatis对于默认配置的实现方式,我们可以按照需要修改存入特定的配置,构建定制化的jar类使用。 对于每种配置的参数说明本文并未列出,具体内容可以参考[官方说明文档](https://mybatis.org/mybatis-3/zh/configuration.html )。 ------------ ###### 自猿其说Tech-京东物流技术发展部 ###### 作者:管碧强
原创文章,需联系作者,授权转载
上一篇:奇点敏捷团队的第五项修炼
下一篇:以产品视角看项目管理
相关文章
Taro小程序跨端开发入门实战
Flutter For Web实践
配运基础数据缓存瘦身实践
自猿其说Tech
文章数
426
阅读量
2216839
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2216839
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号