Mybatis源码解读-configuration(3)

本文介绍了MyBatis中Configuration对象的作用及其创建过程。Configuration对象在创建SqlSessionFactory时生成,并通过XMLConfigBuilder解析XML配置文件。文章还讨论了Configuration对象如何使用装配模式来管理大量配置参数。

在之前两篇文章中,我们都有介绍这个configuration对象,他是我们Mybatis的核心配置对象,这个对象是创建SqlSessionFactory的时候被创建的.

之前有说SqlSessionFactory创建的时候是通过SqlSessionFactoryBuilder的build方法

通过XMLConfigBuilder这个对象进行xml解析.

 

从上边可以看出来,在解析之前他会进行一个判断,这个东西mybatis的一个保护机制,为了保证多线程情况下防止一个xml文件被解析两次,只有parsed为false的时候才能解析,保证线程安全,然后就从xml中的configuration标签进行解析,下边具体就可以看到的是咱们经常进行的一些配置类标签,在这些对象不断的解析中,一直不断的给configuration对象中进行注入.最终返回这个对象.

 在configuration对象中我们还有是用一个设计模式,

在上图中我们看到configuration对象因为他包含了我们mybatis中所有的设置,所以他的参数特别的多,mybatis在这里是用了装配模式,在参数特别多的时候我们可以默认参数属性以及值,是我们软件开发中一种常见的赋值方式. 

MyBatis是一个开源的持久层框架,它的配置文件包含了会深深影响MyBatis行为的设置和属性信息。配置文件的顶层结构包括properties(属性)、settings(设置)、typeAliases(类型别名)、typeHandlers(类型处理器)、objectFactory(对象工厂)、plugins(插件)、environments(环境配置)、mappers(映射器)等。\[3\] 在MyBatis源码中,有一个方法build,该方法用于解析动态脚本并生成SqlSource对象。在该方法中,首先会调用parseDynamicTags方法解析动态标签,得到一个包含多个SqlNode的列表contents。然后,通过将contents传入MixedSqlNode的构造函数,创建一个MixedSqlNode对象rootSqlNode。接下来,根据是否为动态脚本,分别创建DynamicSqlSource或RawSqlSource对象,并将configuration、rootSqlNode和parameterType作为参数传入构造函数。最后,返回创建的SqlSource对象。\[2\] 另外,还有一个方法configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql),该方法用于创建StatementHandler对象。具体的解读需要查看该方法的实现代码。 #### 引用[.reference_title] - *1* [mybatis源码深度解析](https://blog.youkuaiyun.com/qq_31359923/article/details/126582701)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* [【MybatisMybatis源码解读](https://blog.youkuaiyun.com/keepfriend/article/details/124356649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] - *3* [mybatis源码解析](https://blog.youkuaiyun.com/weixin_43189971/article/details/125418419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值