Mybatis源码解析:配置解析流程

在这里插入图片描述

解析配置

在我看mybatis源码的时候,大部分代码还是很简单的,DefaultResultSetHandler这个类是最难的,没有之一,debug了很多遍,还是没太搞懂,基于ResultSetHandler也并不是很重要,所以本系列我就不会写ResultSetHandler的内容了

mybatis解析配置阶段的代码还是比较简单的,基本上就是对配置文件中的各种属性进行解析,然后将值保存到Configuration对象中,因此直接画个流程图就略过了。比较重要的过程,比如sql的解析过程我会单开一节来分析

解析的过程用了建造者模式,将对象与对象的创建过程进行了解耦。建造者模式UML图如下
在这里插入图片描述
主要有如下4个角色:

  1. 建造者(Builder)接口:定义对象各部分的行为
  2. 具体建造者(ConcreteBuilder):一般来说有2种类型的方法,1.建造方法,如buildPart1(),2.获取构建好的产品对象的方法,如getProduct()方法
  3. 导演(Director):通过调用具体建造者,创建需要的产品
  4. 产品(Product):用户需要使用的复杂对象

mybatis中配置文件分为两部分,mybatis配置文件和mapper映射文件,用了不同的类来进行解析

文件
XMLConfigBuilder主要负责解析mybatis-config.xml
XMLMapperBuilder主要负责解析mapper.xml中的cache-ref,cache,parameterMap,resultMap,sql节点
XMLStatementBuilder主要负责解析mapper.xml中的select,insert,update,delete这四类节点

当执行完如下2行代码,整个解析过程就完毕了,最后返回的SqlSessionFactory为DefaultSqlSessionFactory

Reader reader = Resources.getResourceAsReader("org/apache/ibatis/mytest/mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);

在这里插入图片描述
我把解析每个sql语句中比较重要的代码截出来了

org.apache.ibatis.builder.xml.XMLStatementBuilder#parseStatementNode

在这里插入图片描述
最后把解析完成的sql封装成MappedStatement,并存到Configuration中,后续根据id就可以直接取到MappedStatement,然后执行sql
在这里插入图片描述
MappedStatement中有一个很重要的属性SqlSource,这是解析完sql后封装的一个对象,下节我们详细分析一下
在这里插入图片描述

参考博客

[0]https://www.jianshu.com/p/7bc6d3b7fb45
适配器模式
[1]http://www.cnblogs.com/liuling/archive/2013/04/12/adapter.html
源码中文注释
[2]https://github.com/tuguangquan/mybatis
优秀博文
[3]https://blog.csdn.net/nmgrd/article/details/54608702
MyBatis源码解析(一)——MyBatis初始化过程解析(好文)
[4]https://www.jianshu.com/p/7bc6d3b7fb45
MyBatis源码解析(二)——动态代理实现函数调用(好文)
[5]https://www.jianshu.com/p/46c6e56d9774
MyBatis 源码解析:通过源码深入理解 SQL 的执行过程
[6]https://gitbook.cn/books/5a37b6b66eec7c4f044a75d0/index.html#undefined
Mybatis源码分析(一)–Mapper的动态代理
[7]https://zhuanlan.zhihu.com/p/31228047
建造者模式
[8]http://www.hollischuang.com/archives/1477
Mybatis缓存详解
[9]http://blog.51cto.com/zero01/2103911

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值