抽象类BaseBuilder-<font color="#d32f2f">建造者接口</font>
子类SqlSourceBuilder
子类XMLStatementBuilder-<font color="#d32f2f">具体建造者C</font>
接口SqlSource表示映射文件或注解中定义的SQL语句
类MappedStatement表示映射配置文件中定义的SQL节点
解析include节点 将include节点替换成sql节点中定义的SQL片段,占位符替换成真实参数
方法processSelectKeyNodes负责解析selectKey节点
在insert、update节点中可以定义selectKey节点来解决主键自增问题
selectKey节点对应的KeyGenerator接口用于生成主键
先创建SqlSource对象后创建MappedStatement对象并添加到Configuration.mappedStatements集合中保存
解析SQL节点
绑定Mapper接口
每个映射配置文件的命名空间可以绑定一个Mapper接口并注册到MapperRegistry中
处理incomplete*集合
XMLMapperBuilder.configurationElement()解析映射配置文件时引用到还未解析的节点就会解析失败并抛出异常
incompleteMethods集合
incompleteResultMaps集合
incompleteCacheRefs集合
incompleteStatements集合
XMLMapperBuilder.configurationElement()解析完成后还会调用parsePendingResultMaps、parsePendingCacheRefs、parsePendingStatements方法处理incomplete*集合
子类XMLMapperBuilder-<font color="#d32f2f">具体建造者B</font>
组合了类MapperBuilderAssistant
方法useNewCache负责创建Cache对象并添加到Configuration.caches集合保存(StrictMap<Cache>类型)
方法parse解析映射文件
解析cache节点
解析cache-ref节点
解析parameterMap节点-官网已标记废弃
解析resultMap节点
解析sql节点-依赖XMLStatementBuilder解析
子类XMLConfigBuilder-<font color="#d32f2f">具体建造者A</font>
方法parse负责解析mybatis-config.xml
解析properties节点并设置到XPathParser和Configuration的variables字段中
解析settings节点并设置到Configuration对象的对应属性中
解析typeAliases、typeHandlers节点并通过TypeAliasesRegistry、TypeHandlersRegistry进行注册
解析plugins节点并放入Configuration的拦截器链中
解析objectFactory节点并放入Configuration
解析environments节点并放入Configuration
解析databaseIdProvider节点并放入Configuration
解析mappers节点,依赖XMLMapperBuilder对象加载映射文件
子类MapperBuilderAssistant
子类ParameterMappingTokenHandler
子类XMLScriptBuilder
组合了类Configuration、TypeAliasRegistry、TypeHandlerRegistry<br>
方法resolveAlias依赖TypeAliasRegistry解析别名
方法resolveTypeHandler依赖TypeHandlerRegistry查找指定的TypeHandler对象
方法resolveJdbcType
方法resolveResultSetType
方法resolveParameterMode