springboot的MybatisAutoConfiguration自动配置类会创建SqlSessionFactory,创建过程就是填充configuration属性,调用buildSqlSessionFactory()方法完成SqlSessionFactory创建,这其中就会创建XMLMapperBuilder解析mapper.xml和XMLConfigBuilder解析mabatis-config.xml
1.关键方法parse
public void parse() {
if (!configuration.isResourceLoaded(resource)) {
//处理<mapper >节点 也就是解析所有xml中的所有标签 例如select resultmap
configurationElement(parser.evalNode("/mapper"));
//将 resource 添加到 Configuration.loadedResources 集合 保存 它是 HashSet<String>
//类型的集合,其中记录了已经加载过的映射文件
configuration.addLoadedResource(resource);
//2.构建mapper与代理的关系
bindMapperForNamespace();
}
parsePendingResultMaps();
parsePendingCacheRefs();
parsePendingStatements();
}
parse方法是被循环调用的,也就是每个mapper.xml都会执行一次。
configuration关键属性
1.mapperRegistry
- bindMapperForNamespace()方法实现的,对接口的全限定名和代理类进行绑定
2.resultMaps
就是xml中每个方法定义的resultMap或实体类型的resultType
3.sqlFragments
每个xml中定义的sql标签
4.loadedResources
- configuration.addLoadedResource(resource)方法实现的
这里有接口,接口的全限定名,对应的xml。
5.mappedStatements
这里对应每个< select >、< insert >、< update >、< delete >标签,sqlSource是标签中写的sql,以及对应的resultMap。