Mybatis部分源码解读

Mybatis初始化的第一步,初始化SqlsessionFactor

 Mybatis读取配置的XML文件进行解析器的构建

 

创建完Xpth对象后接着mybatis会创建Document文档操作对象 

以下是mybatis对Document文档操作对象的初始化参数的设置

 Mybatis在创建解析器时内部会去读取configuration(mybatis核心配置类)

 mybatis初始化SqlsessionFactor的时候会去创建ProxyFactory代理工厂,这也是为什么我们在使用mybatis操作crud时,只用编写interface即可

 这个代理工厂实现方式,mybatis写了多种,这里放的是通过cglib技术编写的代理工厂

 这里是初始化各种处理程序注册表,也是在configuration中进行完成的

 由于mybatis配置类初始化的对象太多了,就不一一进行介绍了,有兴趣的小伙伴可以去configuration类中查看相关的mybatis的配置对象有哪些。

 当创建mybaits创建好解析器之后就会去读取我们编写的编写的XML配置文件,当前的/configuration也就是mybaits配置文件的root节点。

在拿到root(configuration)节点后就会调用parseConfiguration方法开始获取我们所写的XML配置文件的属性

 在配置完configuration对象后会将configuration对象进行返回

至此Mybatis的SqlSessionFactor初始化完毕!

 小伙伴们,接下来我们来看看Mybatis是如何通过动态代理技术来实现对数据库的crud

我们在初始化sqlSessionFactor的时候也就会在configuration对象里实例化很多我们后面所需要的对象就比如当我们需要执行通过sqlSessionFactor创建的sqlsession对象对数据库进行操作的时候

我们所需要的对象有 MapperRegistry

首先会去底层的DefaultSqlsession中的getMapper方法

然后DefaultSqlsessiond对象会去调用configuration中的getMapper对象。

 在configuration中获取到对应的Mapper代理对象后,会依次进行返回。

Mapper的执行流程后续会跟新!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
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.csdn.net/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.csdn.net/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.csdn.net/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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值