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

相关推荐
前端fighter几秒前
全栈项目:旅游攻略系统
前端·后端·源码
小王不爱笑1321 小时前
hami-MyBatis 逆向 ## 逆向工程配置与使用
mybatis
5***84642 小时前
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
spring boot·后端·mybatis
m***56722 小时前
Spring 中使用Mybatis,超详细
spring·tomcat·mybatis
源码宝3 小时前
诊所门诊系统源码,采用SpringBoot+Vue2.0+MySQL技术栈开发,满足门诊部-诊所/中小型及连锁门诊搭建信息化平台
spring boot·后端·mysql·源码·门诊系统·医疗信息化·诊疗门诊
qq_2704900963 小时前
基于SSM的智能校内点餐系统设计与实现
java·eclipse·tomcat·mybatis
好好研究5 小时前
MyBatis框架 - 逆向工程
java·数据库·mybatis
o***74175 小时前
SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!
spring boot·后端·mybatis
3***C7447 小时前
Spring Boot 集成 MyBatis 全面讲解
spring boot·后端·mybatis
r***R2897 小时前
Spring Boot3.3.X整合Mybatis-Plus
spring boot·后端·mybatis