画布 1
MyBatis的Class与Mapper映射
  Resources.getResourceAsStream(resource)
  new SqlSessionFactoryBuilder().build(inputStream)
    new XMLConfigBuilder(inputStream, xxx,xxx)
    parser.parse()
      解析 MyBatis 配置文件生成 Configuration
      propertiesElement(root.evalNode("properties"));
        解析 MyBatis 配置文件中的 properties 标签
      .......
      mapperElement(root.evalNode("mappers"));
        使用 package 标签指定 mapperClass 路径
          configuration.addMappers(mapperPackage)
            获取指定路径下的 Class
              遍历 Class， addMapper(mapperClass)
              knownMappers.put(type, new MapperProxyFactory<>(type));
MapperAnnotationBuilder parser = new MapperAnnotationBuilder(config, type);
parser.parse();
loadCompleted = true;
                if (!configuration.isResourceLoaded(resource)) {
loadXmlResource();
configuration.addLoadedResource(resource);
xxxx
}
        使用 mapper 标签，通过 resource/url 指定 Mapper.xml 路径
          XMLMapperBuilder.parse()
            解析 Mapper.xml 文件
            判断 xml 是否被解析
            configurationElement(parser.evalNode("/mapper"))
              解析 xml 中的各个标签
            标记 xml 和对应的 Class 已被解析
              bindMapperForNamespace()