type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
 

📝 题记

MyBatis是如何对 Mapper 文件中的sql进行处理呢? 虽然上篇解析 mybatis-config.xml 是有进行说明的, 但是应该拿出来单独仔细解析下. 因为这个里面涉及到动态sql, 加上mapper文件自身也有很多标签内容,然后MyBatis是怎么读取出这些内容的呢?读取出来后,又是做了怎么样的处理, 然后达到了sql那种执行效果的呢?
意思也就是,Mapper + 动态sql , 内容还是有点多的, 并且也很重要, 是非常有必要拿出来单独的仔细讲解下的.
 

Target

在之前对标签的进行解析的时候,是有对 标签进行一个初步的解析. 然后里面其实是很多内容还没填补很详细,所以特意记录下对 详细操作的. 那么,下文就开始操作吧.

org.apache.ibatis.builder.xml.XMLMapperBuilder#parse

主要来看这段解析的代码 :

resultMapElements 方法 :

 

SqlElement 方法

该方法可以很明显的感受到是对 标签进行解析的.
最后 解析后的值,是使用 namespace + id 存放在 org.apache.ibatis.builder.xml.XMLMapperBuilder#sqlFragments 的属性中的.

buildStatementFromContext() 方法 :

这里是对 select / insert / update / delete 标签进行解析.
 
 

🤗 总结归纳

总结下 MyBatis 解析 Mapper的xml 文件流程。 可以感受到,对于Mybatis处理Mapper,对其字段属性都是挨个解析的,还是下了很大的功夫.
先是有一个集合来控制是否已经解析过了,算是一种是否解析的开关配置. 可以看到其先后的解析顺序,
namespace –> cache-ref –> cache —> mapper/parameterMap —> mapper/resultMap —> mapper/sql —> select/insert/update/detele.
当解析这些标签的时候, 又会对标签里面的属性进行解析. 这里,主要看下我们平常使用到最多的标签, MyBatis 对这些标签解析了后,其后有是怎么利用的呢?可以看到目前MyBatis是存放在一些configuration等类信息里面,那么等到真正去查询sql语句的时候, MyBatis 又是怎么用上的呢? 这里目前只讲了如何解析.
解析完了,没异常,那就是解析都ok了,剩下的就是看当 MyBatis 去查询的时候, 是怎么利用上这些资源的呢?所以看接下来的更新.

📎 参考文章

 
💡
有关文章的问题,欢迎您在底部评论区留言,一起交流~