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中的一些配置信息。

相关推荐
柯南二号2 小时前
【Java后端】MyBatis-Plus 原理解析
java·开发语言·mybatis
Easocen3 小时前
Mybatis学习笔记(五)
笔记·学习·mybatis
最初的↘那颗心8 小时前
Flink Stream API 源码走读 - window 和 sum
大数据·hadoop·flink·源码·实时计算·窗口函数
qq_三哥啊9 小时前
【IDEA】设置Debug调试时调试器不进入特定类(Spring框架、Mybatis框架)
spring·intellij-idea·mybatis
柯南二号11 小时前
【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
java·spring boot·mybatis
记忆不曾留19 小时前
Mybatis 源码解读-SqlSession 会话源码和Executor SQL操作执行器源码
mybatis·二级缓存·sqlsession会话·executor执行器·一级缓存localcache
灵魂猎手1 天前
3. MyBatis Executor:SQL 执行的核心引擎
java·后端·源码
灵魂猎手2 天前
2. MyBatis 参数处理机制:从 execute 方法到参数流转全解析
java·后端·源码
灵魂猎手2 天前
1. Mybatis Mapper动态代理创建&实现
java·后端·源码
昵称为空C2 天前
SpringBoot 实现DataSource接口实现多租户数据源切换方案
后端·mybatis