MyBatis源码分析 -- mapper的解析流程

0.准备一个核心配置文件 和 一个mapper文件

在这里插入图片描述
在这里插入图片描述

1.准备好mybatis的基本环境之后,运行下面的单元测试

在这里插入图片描述

2.进入SqlSessionFactoryBuilder().build方法

在这里插入图片描述

3.创建 XMLConfigBuilder ,用于解析mabatis的核心配置文件,进入parse(),然后parseConfiguration(),里面为解析xml对应的信息

在这里插入图片描述

4. 我们重点来看看mapper节点的解析,这里循环一个个解析mapper文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.进入parse()方法,开始解析mapper文件。先判断是否已经解析过

在这里插入图片描述

6.进入configurationElement(),看如何解析mapper文件的。

在这里插入图片描述

7.重点来看看如何解析sql的。创建 XMLStatementBuilder 对象,用于接续sql语句

在这里插入图片描述
在这里插入图片描述

8.获取节点上的信息

在这里插入图片描述
在这里插入图片描述

9.进入 langDriver.createSqlSource ,看如何解析sql的。把sql语句交给 XMLScriptBuilder对象,进入builder.parseScriptNode() ,

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这时,看见两个熟悉的符号,“#{”和“}”

在这里插入图片描述

10.进入 parser.parse(originalSql) 开始解析,传入原始sql

在这里插入图片描述

解析{}里面的内容,hander对象是上一步new的对象,

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

11.SqlSourceBuilder解析{}里面的内容

在这里插入图片描述
在这里插入图片描述

解析出来了之后放ParameterExpression ,他继承了hashmap

在这里插入图片描述
在这里插入图片描述

11.最后得到结果,完了返回一个“?”

在这里插入图片描述
在这里插入图片描述

sql解析完了。参数拿到了,sql的参数被替换成了?

在这里插入图片描述
在这里插入图片描述

12.解析完了之后,拿到namespace + 标签id 作为key,放入 configuration 里面的 mappedStatements 容器中。

在这里插入图片描述
在这里插入图片描述

13. 至此,一个mapper文件里面的节点就解析完毕了。循环里面将继续解析其他的mapper文件

在这里插入图片描述
在这里插入图片描述

14. mapper文件里面的东西解析完了之后开始注册mapper接口

在这里插入图片描述
在这里插入图片描述

15 调用 configuration.addMapper(boundType) ,然后 mapperRegistry.addMapper(type) ,将mapper接口的工厂类添加到mapper注册中心。注:是工厂,不是实现类。实现类是调用的反射的。

在这里插入图片描述

16.处理失败的节点

在这里插入图片描述

17.至此,一个mapper文件就全部解析完毕,循环继续解析其他的mapper文件

在这里插入图片描述

18.mapper解析完了之后,SqlSessionFactory 也得到了

在这里插入图片描述

19.回到梦开始的地方了。

20.下回继续分解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值