ResultMappingResolver类介绍

一个ResultMap元素对应一个ResultMap对象
resultMap元素中的idArg/result/association/collection元素对应一个ResultMapping对象,所有resultMap会有多个ResultMapping对象
association/collection元素对应一个内映射的ResultMap
不管是ResultMap对象还是内映射的ResultMap对象都被会加入到Configuration.resultMap属性
ration.resultMap属性
x
 
1

2
一个ResultMap元素对应一个ResultMap对象
3
  resultMap元素中的idArg/result/association/collection元素对应一个ResultMapping对象,所有resultMap会有多个ResultMapping对象
4
  association/collection元素对应一个内映射的ResultMap
5
  不管是ResultMap对象还是内映射的ResultMap对象都被会加入到Configuration.resultMap属性
6

7

ResultMappingResolver类分析
public class ResultMapResolver {
private final MapperBuilderAssistant assistant;
private final String id;
private final Class<?> type;
private final String extend;
private final Discriminator discriminator;
private final List<ResultMapping> resultMappings;
private final Boolean autoMapping; public ResultMap resolve() {
return assistant.addResultMap(this.id, this.type, this.extend, this.discriminator, this.resultMappings, this.autoMapping);
} } public class MapperBuilderAssistant extends BaseBuilder {
...
public ResultMap addResultMap(String id,Class<?> type,String extend,Discriminator discriminator,List<ResultMapping> resultMappings,
Boolean autoMapping) {
id = applyCurrentNamespace(id, false);
extend = applyCurrentNamespace(extend, true);
if (extend != null) {
if (!configuration.hasResultMap(extend)) {
throw new IncompleteElementException("Could not find a parent resultmap with id '" + extend + "'");
}
ResultMap resultMap = configuration.getResultMap(extend);
List<ResultMapping> extendedResultMappings = new ArrayList<ResultMapping>(resultMap.getResultMappings());
extendedResultMappings.removeAll(resultMappings);
// Remove parent constructor if this resultMap declares a constructor.
boolean declaresConstructor = false;
for (ResultMapping resultMapping : resultMappings) {
if (resultMapping.getFlags().contains(ResultFlag.CONSTRUCTOR)) {
declaresConstructor = true;
break;
}
}
if (declaresConstructor) {
Iterator<ResultMapping> extendedResultMappingsIter = extendedResultMappings.iterator();
while (extendedResultMappingsIter.hasNext()) {
if (extendedResultMappingsIter.next().getFlags().contains(ResultFlag.CONSTRUCTOR)) {
extendedResultMappingsIter.remove();
}
}
}
resultMappings.addAll(extendedResultMappings);
}
// 交由ResultMap.Builder来创建ResultMap对象
ResultMap resultMap =
new ResultMap.Builder(configuration, id, type, resultMappings, autoMapping).discriminator(discriminator).build();
// 将ResultMap加载在Configuration中
configuration.addResultMap(resultMap);
return resultMap;
} }
x
 
1
public class ResultMapResolver {
2
  private final MapperBuilderAssistant assistant;
3
  private final String id;
4
  private final Class<?> type;
5
  private final String extend;
6
  private final Discriminator discriminator;
7
  private final List<ResultMapping> resultMappings;
8
  private final Boolean autoMapping;
9

10
  public ResultMap resolve() {
11
    return assistant.addResultMap(this.id, this.type, this.extend, this.discriminator, this.resultMappings, this.autoMapping);
12
  }
13

14
}
15

16
public class MapperBuilderAssistant extends BaseBuilder {
17
  ...
18
   public ResultMap addResultMap(String id,Class<?> type,String extend,Discriminator discriminator,List<ResultMapping> resultMappings,
19
      Boolean autoMapping) {
20
    id = applyCurrentNamespace(id, false);
21
    extend = applyCurrentNamespace(extend, true);
22
    if (extend != null) {
23
      if (!configuration.hasResultMap(extend)) {
24
        throw new IncompleteElementException("Could not find a parent resultmap with id '" + extend + "'");
25
      }
26
      ResultMap resultMap = configuration.getResultMap(extend);
27
      List<ResultMapping> extendedResultMappings = new ArrayList<ResultMapping>(resultMap.getResultMappings());
28
      extendedResultMappings.removeAll(resultMappings);
29
      // Remove parent constructor if this resultMap declares a constructor.
30
      boolean declaresConstructor = false;
31
      for (ResultMapping resultMapping : resultMappings) {
32
        if (resultMapping.getFlags().contains(ResultFlag.CONSTRUCTOR)) {
33
          declaresConstructor = true;
34
          break;
35
        }
36
      }
37
      if (declaresConstructor) {
38
        Iterator<ResultMapping> extendedResultMappingsIter = extendedResultMappings.iterator();
39
        while (extendedResultMappingsIter.hasNext()) {
40
          if (extendedResultMappingsIter.next().getFlags().contains(ResultFlag.CONSTRUCTOR)) {
41
            extendedResultMappingsIter.remove();
42
          }
43
        }
44
      }
45
      resultMappings.addAll(extendedResultMappings);
46
    }
47
    // 交由ResultMap.Builder来创建ResultMap对象  
48
    ResultMap resultMap = 
49
        new ResultMap.Builder(configuration, id, type, resultMappings, autoMapping).discriminator(discriminator).build();
50
    // 将ResultMap加载在Configuration中  
51
    configuration.addResultMap(resultMap);
52
    return resultMap;
53
  }
54

55
}





































mybatis-ResultMappingResolver类信息的更多相关文章

  1. 获取Delphi所有类的类信息

    Delphi遍历进程中所有Class的TypeInfo,即便是在implementation中的class或者其他 class的private的子class. 一般普通EXE中的TypeInfo存放在 ...

  2. 简单测试运行时类信息(RTTI),附详细例子

    新建一个单元文件,填写如下代码,然后保存为 ClassInfoUnit.pas,这里定义了一个结构,用来读取指定类的信息. unit ClassInfoUnit; interface uses Cla ...

  3. java 反射提取类信息, 动态代理 和过滤某些方法演示

    java 反射提取类信息, 动态代理 和过滤某些方法演示 package org.rui.classts.reflects; import java.lang.reflect.Constructor; ...

  4. JVM基础系列第13讲:JVM参数之追踪类信息

    我们都知道 JVM 在启动的时候会去加载类信息,那么我们怎么得知他加载了哪些类,又卸载了哪些类呢?我们这一节就来介绍四个 JVM 参数,使用它们我们就可以清晰地知道 JVM 的类加载信息. 为了方便演 ...

  5. MFC中关于运行时类信息及动态创建对象的两个宏的意义(转)

    http://blog.csdn.net/ligand/article/details/49839507 MFC运行时类信息 用途: 程序在运行时,获取对象类的信息及类的继承关系 实现: 1.定义的类 ...

  6. QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化

    元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化其中元类又提供了:classInfo,className,构造函数, ...

  7. Java Scala获取所有注解的类信息

    要想获取使用指定注解的类信息,可借助工具: org.reflections.Reflections 此工具将Java反射进行了高级封装,Reflections 通过扫描 classpath,索引元数据 ...

  8. Mybatis核心类生命周期和管理

    Mybatis核心类生命周期和管理 原文链接:https://blog.csdn.net/qq1134550437/article/details/51960480 1.SqlSessionFacto ...

  9. generator自动生成mybatis配置和类信息

    generator自动生成mybatis的xml配置.model.map等信息: 1.下载mybatis-generator-core-1.3.2.jar包.        网址:http://cod ...

随机推荐

  1. feature map 大小以及反卷积的理解

    (1)边长的计算公式是:  output_h =(originalSize_h+padding*2-kernelSize_h)/stride +1 输入图片大小为200×200,依次经过一层卷积(ke ...

  2. maven配置环境变量失败解决办法

    配置maven路径什么的统统正确,最后测hi不成功.在网上搜索了好多资料方法都解不了 具体问题具体对待吧,如果有和我类似的小伙伴,可以尝试一下我的这个办法,在maven路径后面加/bin path变量 ...

  3. Windows 下 Redis 服务无法启动,错误 1067 进程意外终止解决方案

    1.检查端口是否被占用 2.修改 Windows 服务里的 Redis 服务为本地系统服务(修改方式见下文) 方法: 1.看系统日志 桌面计算机/此电脑(Win10名称)右键打开管理,或 Win+R ...

  4. 拖图UI和纯代码UI

    1拖图UI, 优点:适合快速实验各种天马行空的想法 缺点:太多的storyBoard不好管理,不适合较大的项目,如果一个项目有价值,或成熟了,为了维护拓展,就最好改为纯代码 2纯代码UI 优点:1好维 ...

  5. MySql常用函数全部汇总

    MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操作.例如,字符串连接函数 ...

  6. Birdman Quotes

    Popularity is the slutty little cousin of prestige (威望,声望) . A man becomes a critic when he cannot b ...

  7. Getting started with Processing 第九章总结

    函数 函数的力量在于模块化. 范例 掷骰子 rollDice()函数 rollDice(int numSides){int d = 1+int(random(numSides));println(&q ...

  8. Nr,GenBank, RefSeq, UniProt 数据库的异同

    Nr,GenBank, RefSeq, UniProt 数据库的异同 有的文章在做DEG分析时,会把reads比对到RefSeq的转录组上.我也没搞清楚这和直接比对到常规转录组上有什么区别. 文章:S ...

  9. 混合测序(Pooling)

    什么是高通量测序技术中的多重测序? 多重测序是指将带有特殊分子标签(barcode或者index)的不同来源的DNA标本,放入一个反应体系进行测序的方法.与一次检测一种来源的DNA相比,多重检测通过分 ...

  10. Jenkins与Gitlab集成

    一.安装jenkinshttps://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/     #清华yum源 yum -y install java-1.8. ...