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

相关推荐
写了20年代码的老程序员15 小时前
写了 20 年 Java,我受够了 MyBatis 的 4 个瞬间
mybatis·orm
斯特凡今天也很帅1 天前
新建数据源报错No bean named ‘SqlSessionFactorykf‘ available
java·数据库·spring boot·mybatis
未若君雅裁1 天前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
Simon523142 天前
MyBatis三大核心文件:Entity、DAO、Mapper
mybatis
MandalaO_O2 天前
MyBatis:核心概念 + 环境搭建 + CRUD
java·tomcat·mybatis
XS0301062 天前
MyBatis基础实战笔记一
笔记·mybatis
噢,我明白了2 天前
MyBatis-Plus的引入和配置
java·tomcat·mybatis
爱笑的源码基地2 天前
小微企业ERP源码,采用SpringBoot+Vue+ElementUI+UniAPP技术架构,支持二次开发及商用授权
java·源码·二次开发·erp·源代码·mrp生产计划
霸道流氓气质2 天前
Spring Boot + MyBatis-Plus 实现异常隔离的 Upsert 数据落库(含远程调用数据补全)
spring boot·后端·mybatis
Devin~Y2 天前
大厂Java面试实战:Spring Boot微服务、Redis缓存、Kafka消息队列与Spring AI RAG
java·spring boot·redis·kafka·mybatis·spring mvc·hikaricp