Mybatis中SqlSession的创建流程

前面文章介绍了Mybatis的核心组件,接下来介绍Mybatis的入口SqlSession的创建过程。SqlSession是客户端和Mybtais的交互类,我们就从SqlSession的创建开始介绍,从最顶层的设计一步步扒出Mybatis的架构设计。

SqlSession的创建依赖Configuration对象,接下来先介绍Configuration的创建过程。

Configuration的创建

我们知道Mybtais框架在启动后会将Mybtais的主配置文件信息转换为Configuration对象。Mybatis的配置文件为XML格式,其使用JDK内置的XPath方式解析配置文件,只不过在XPath的基础上封装了一个XPathParser类简化了直接与XPath交互的复杂性。 具体的解析XML过程不进行细节性描述。读者只需明白使用该类可以将XML的配置文件转换成对应的JAVA对象足矣。 Mybtais通过XMLConfigBuilder类的parse方法来实例化Configuration对象,如下图所示。

其parse()方法使用XPathParser的parser对象将配置文件解析成XNode,之后调用其parseConfiguration()方法解析XNode后填充Configuration对象。parseConfiguration()方法如下所示,其对于每个主配置文件的configuration的子标签都有对应的解析方法。

这些属性中常用的也都可在Mybatis官网上找到具体信息配置_MyBatis中文网 至此,Mybtais在启动后,创建了Configuration对象,将其配置信息解析后存放在了Configuration对象中。

SqlSession的创建

SqlSession的创建需要借助其工厂类SqlSessionFactory。而SqlSessionFactory的创建需要借助SqlSessionFactoryBuilder类的build()方法。

在build()方法中,先获取到了XMLConfigBuilder对象,调用其parse()方法获取Configuration实例,最终调用SqlSessionFactoryBuilder的build()方法,在build()方法里new出来一个DefaultSqlSessionFactory实例。

有了SqlSessionFactory对象之后,便可以调用其Opensession方法生成一个SqlSession对象的实例。

如上图所示,获取SqlSession对象时先获取主配置文件中的Environment对象,之后通过Environment获取事务管理器,再通过Executor的Type创建对应的Executor对象,最后创建DefaultSqlSession对象,该对象持有对应的Executor。至此SqlSession对象创建完毕。

总结

在创建SqlSession对象时,需要借助SqlSessionFactoryBuilder类创建SqlSessionFactory对象。在创建SqlSessionFactory对象的build()方法中,填充了Configuration对象。并且SqlSessionFactory持有Configuration的引用,之后在创建SqlSession对象时获取Configuration中的一些配置信息。

相关推荐
我是大卫7 小时前
【图】React源码解析-从底层数据结构、渲染调度到闭包原理深挖useRef的核心机制
前端·react.js·源码
Java面试题总结1 天前
mybatis插件
java·tomcat·mybatis
我是大卫1 天前
【图】React源码解析-从数据结构、依赖追踪机制、值传播与更新触发、以及性能陷阱与优化,深挖useContext的底层原理
前端·react.js·源码
Devin~Y2 天前
互联网大厂Java面试实战:Spring Boot、MyBatis、Redis、Kafka、JWT、Spring Cloud 与 AI 场景追问
java·spring boot·redis·spring cloud·kafka·mybatis·spring security
Ethan01072 天前
mybatis插件
mybatis
我是大卫2 天前
【图】React源码解析-从“上帝视角”俯瞰React的认知框架
前端·react.js·源码
我是大卫2 天前
【图】React源码解析-从源码数据结构、执行机制对比、闭包陷阱与最佳实践四个维度,深挖useMemo和useCallback的底层原理
前端·react.js·源码
扎Zn了老Fe3 天前
MyBatis-Plus必知必会:告别低效CRUD,高效开发持久层
后端·mybatis
醉城夜风~3 天前
MyBatis 基础CRUD全套实战学习笔记
笔记·学习·mybatis
万亿少女的梦1683 天前
基于微信小程序、Spring Boot与Vue3的智慧养老管理系统设计与实现
spring boot·redis·微信小程序·mybatis·vue3