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

相关推荐
大学生资源网19 小时前
基于Javaweb技术的宠物用品商城的设计与实现(源码+文档)
java·mysql·毕业设计·源码·springboot
星光一影19 小时前
教育培训机构消课管理系统智慧校园艺术舞蹈美术艺术培训班扣课时教务管理系统
java·spring boot·mysql·vue·mybatis·uniapp
cike_y1 天前
Mybatis之作用域(Scope)和生命周期-解决属性名和字段名不一致的问题&ResultMap结果集映射
java·开发语言·数据库·tomcat·mybatis
柒.梧.1 天前
MyBatis一对一关联查询深度解析:大实体类、SQL99联表、分布式查询实践
分布式·mybatis
千寻技术帮1 天前
10363_基于SSM的农机租赁管理系统
mysql·毕业设计·ssm·源码·农机租赁
2501_937193141 天前
中兴机顶盒纯净固件|多机型适配+刷机解析
android·源码·源代码管理·机顶盒
Coder_Boy_1 天前
SpringAI与LangChain4j的智能应用-(理论篇)
人工智能·spring·mybatis·springai·langchain4j
zhoupenghui1681 天前
项目访问接口时报“MISCONF Redis is configured to save RDB snapshots, ...“错误的解决方案
数据库·redis·mybatis
不是,你来真的啊?1 天前
Vue3响应式原理(源码)【reactive,ref,computed】
前端·vue·源码
cike_y1 天前
Mybatis之解析配置优化
java·开发语言·tomcat·mybatis·安全开发