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. Pycharm设置去除显示的波浪线

    1.选择文件选择file—Settings,如下图打开setting对话框 2.选择Editur—Color Scheme—General选项,然后选择右边对话框中的Errors and Warnin ...

  2. Codeforces 833 C - Ever-Hungry Krakozyabra

    思路: 首先,inedible tails 的个数最多为C(18+9,9)个(用隔板法),所以我们暴力出所有的 inedible tails,然后检查一下在[L, R]这段区间是否存在这个inedib ...

  3. sql server 学习笔记 ( backup 备份方案 )

    做个记入就好 USE [master] SELECT bs.database_name AS 'Database Name', bs.backup_start_date AS 'Backup Star ...

  4. MATLAB矩阵操作

  5. C# 定时调用方法

    private void button1_Click(object sender, EventArgs e) { System.Timers.Timer timer = new System.Time ...

  6. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建子网格

    jQuery EasyUI 数据网格 - 创建子网格 使用数据网格(datagrid)的详细视图,用户可以展开一行来显示附加的详细信息. 任何内容都可以加载作为行详细,子网格也可以动态加载. 本教程将 ...

  7. 20165303 2017-2017-2《Java程序设计》课程总结

    1.我期待的师生关系 20165303我期望的师生关系 2.学习基础和C语言基础调查 20165303学习基础和C语言基础调查 3.linux安装及学习 20165303 预备作业3 Linux安装及 ...

  8. ActionCable的部署(参考Gorails)

    Gorails视频 https://gorails.com/deploy/actioncable Action Cable – Integrated WebSockets for Rails http ...

  9. python记录_day01 初始

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum),人称龟叔.目前python主要应用于web开发.云计算.科学计算.人工智能.系统运维.金融.图形GUI等 ...

  10. array_unique

    array_unique() 函数移除数组中的重复的值,并返回结果数组. 当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除. 返回的数组中键名不变. <?php $a=array(& ...