# 结果映射 resultMap

```xml
<resultMap id="BaseResultMap" type="com.study.mybatis.entity.Country">
  <id column="ID" jdbcType="INTEGER" property="id"/>
  <result column="NAME" jdbcType="VARCHAR" property="name"/>
  <result column="CODE" jdbcType="VARCHAR" property="code"/>
</resultMap>
```

resultMap 标签用于**配置 Java 对象的属性和查询结果列的对应关系**，通过 resultMap 中配置的 column 和 property 可以将查询列的值映射到 **type 对象**的属性上。

## 属性

resultMap 包含的所有属性如下：

* **id**：必填，并且唯一；

  当前命名空间中的一个**唯一标识**，用于标识一个结果映射。
* **type**：必填，类的完全限定名，或者一个类型别名；

  用于配置查询列所映射到的 **Java 对象的类型**。
* **extends**：选填，可以配置当前的 resultMap 继承自其他的 resultMap，属性值为继承的 resultMap 的 id。

  > **继承的 resultMap 可以位于不同的映射文件中，在此种情形下，必须通过&#x20;**<mark style="color:blue;">**namespace.id**</mark>**&#x20;来标识该resultMap（所有需要通过 id 进行标识的属性均可使用这种方式，比如：association 中的 select 和 resultMap）。**
* **autoMapping**：选填，可选值为 true 或 false，用于配置是否启用非映射字段（没有在 resultMap 中配置的字段）的自动映射功能，该配置可以覆盖全局的 autoMappingBehavior 配置。

## 标签

以上是 resultMap 的属性，resultMap 包含的所有标签如下：

* **constructor**：用于在实例化类时，注入结果到构造方法中。
  * **idArg**：ID 参数；标记出作为 ID 的结果可以帮助提高整体性能。
  * **arg**：将被注入到构造方法的一个普通结果。
* **id**：一个 ID 结果；标记出作为 ID 的结果可以帮助提高整体性能。
* **result**：注入到字段或 JavaBean 属性的普通结果。
* association：一个复杂的类型关联，许多结果将包成这种类型。
* collection：一个复杂类型的集合。
* discriminator：根据结果值来决定使用哪个 resultMap
  * case：基于某些值的结果映射。
