1.首先根据路径获取对象解析(流程与获取Environment一致)
- 获取资源位置
- 获取输入流
- 获取Document对象
- 创建解析对象,解析Document
2.对Mapper文件进行拆分理解
rootElement是mapper,存在一个value - namespace 唯一标示
一般来说存在子标签<select></select> <update></update> <delete></delete> <insert></insert>
对每一种子标签建立一种MappedStatement对象对特定标签进行处理
3.进入Select标签内部,总体来说分为两个部分
- Value部分
Value部分主要有id,parameterType,resultType,statementType
(parameterType和resultType解析待后续分析)
2.Text部分+子标签(整体可以理解为一个SqlSource)
4.SqlSource解析
SqlSource主要是有两种
DynamicSqlSource 可以类比于JDBC操作中的Statement
RawSqlSource 可以类比为JDBC中的PreStatement
staticSqlSource是将上述两个SqlSource进行集合,内部封装了一个集合
5.SqlNode
可以理解为一个SqlSource下有多个SqlNode组成,SqlNode可以理解为Sql片段
通过拼接成一个完成的Sql语句,通过apply方法完成解析,通过boundSql进行占位符的填充等操作
简要列举了一些SqlNode
每一种SqlNode写一个专有的SqlNodeHandler,策略模式的使用
附上GitHub地址:持续更新中