Mybatis通过Resource.getResourceAsStream()方法加载MybatisXML配置文件转换为字节输入流,然后通过SqlSessionFactoryBuilder()
方法中的build()
方法进行解析配置文件。
Mybatis初始化的时候会将Mybatis的配置信息全部加载到内存中,使用org.apache.ibatis.session.configuation
实例来进行维护
- 首先对Configuation对象进行解答
Configuration对象的结构和xml配置⽂件的对象⼏乎相同。 回顾⼀下xml中的配置标签有哪些:
-
properties (属性)
-
settings (设置)
-
typeAliases (类型别名)
-
typeHandlers (类型处理器)
-
objectFactory (对象⼯⼚)
-
mappers (映射器)
Configuration也有对应的对象属性来封装它们也就是说,初始化配置⽂件信息的本质就是创建Configuration对象,将解析的xml数据封装到Configuration内部属性中。
通过上图的ParseConfiguration方法传入Mybatis配置文件的顶层标签,进行解析
| 方法 | 作用 |
| — | — |
| propertiesElement(root.evalNode(“properties”)) | 解析<properties/>
标签 |
| Propertiessettings=settingsAsProperties(root.evalNode(“settings”)); | 解析〈settings/>
标签 |
| loadCustomVfs(settings) | 加载⾃定义的VFS实现类 |
| typeAliasesElement(root.evalNode(“typeAliases”)); | 解析<plugins />
标签 |
| objectFactoryElement(root.evalNode(“objectFactory”)) | 解析<objectFactory />
标签 |
| objectWrapperFactoryElement(root.evalNode(“objectWrapperFactory”)) | 解析<objectWrapperFactory />
标签 |
| reflectorFactoryElement(root.evalNode(“reflectorFactory”)) | 解析<reflectorFactory />
标签 |
| settingsElement(settings) | 赋值<settings />
⾄Configuration属性 |
| environmentsElement(root.evalNode(“environments”)) | 解析〈environments />
标签 |
| databaseldProviderElement(root.evalNode(“databaseldProvider”)) | 解析<databaseIdProvider />
标签 |
| typeHandlerElement(root.evalNode(“typeHandlers”)) | 解析<typeHandlers />
标签 |
| mapperElement(root.evalNode(“mappers”)) | 解析<mappers />
标签 |
通过ParseConfiguration方法对XML配置文件解析拿到所有的解析后的信息。
- MappedStatemen
MappedStatement与Mapper配置⽂件中的⼀个select/update/insert/delete节点相对应。mapper中配置的标签都被封装到了此对象中,主要⽤途是描述⼀条SQL语句。
初始化过程
回顾刚开始介绍的加载配置⽂件的过程中,会对mybatis-config.xm l中的各个标签都进⾏解析,其中有mappers标签⽤来引⼊mapper.xml⽂件或者配置mapper接⼝的⽬录。
<selectid="getUser"resultType=“user”>
select * from user where id=#{id}
这样的⼀个select标签会在初始化配置⽂件时被解析封装成⼀个MappedStatement对象,然后存储在Configuration对象的mappedStatements属性中,mappedStatements是⼀个HashMap,存储时key=全限定类名+⽅法名,value =对应的MappedStatement对象。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/26031105907c39f84b8e2fdc9ac9fcb0.jpeg)
Kafka进阶篇知识点
Kafka高级篇知识点
44个Kafka知识点(基础+进阶+高级)解析如下
由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!