Mybatis的结果映射
使用resultMap
Mybatis框架使用resultMap元素来自定义结果映射。
使用场景如下:
1. 数据库字段信息和对象属性不一致
①,若不一致的字段较少,可以在SQL语句中使用别名处理
SELECT 字段1,
数据库的字段2 as 实体类的属性
FROM 表名
②,若不一致的字段较多,可以使用resultMap
在UserMapper.xml
中定义如下:
<resultMap type="类的全限定名或别名" id="起名(唯一)">
<id property="实体类中的属性" column="表中的列名"/> <!--id:主键-->
<result property="实体类中的属性" column="表中的列名"/> <!--result:普通属性-->
</resultMap>
<select id="getAllUser" resultMap="resultMap的id名" >
//这里是查询语句
</select>
2. 复杂的联合查询,可以*控制结果(这个在后面的级联关系中说)
resultMap的自动映射行为
设置自动映射:
<settings>
<setting name="autoMappingBehavior" value="PARTIAL/NONE/FULL"/>
</settings>
resultMap的自动映射的三种行为:
- NONE:禁用自动映射,仅为手动映射的属性赋值。
- PARTIAL:默认行为,对于没有嵌套映射的resultMap使用自动映射;而对于有嵌套映射的resultMap不使用自动映射,仅为手动映射的属性赋值。
- FULL:全部使用自动映射,即使有嵌套映射的resultMap也会使用自动映射。
注意:以上是针对使用 resultMap 的情况而言,如果使用 resultType 则有些不同。例如,resultType不支持嵌套映射,无论autoMappingBehavior
设置为PARTIAL
还是FULL
,实体类都会使用自动映射,而实体类中的关联属性都不会被初始化,始终为null
。并且,由于resultType
完全依赖自动映射,如果autoMappingBehavior
设置为NONE
,resultType 会失效,无法初始化实体类对象而返回 null ,此时返回查询结果只能使用 resultMap 手动映射。自动映射行为对 resultMap 和 resultType 的影响如下表所示:
自动映射行为 | resultType(不支持嵌套映射) | 没有嵌套映射的resultMap | 有嵌套映射的resultMap |
---|---|---|---|
NONE | 失效 | 手动映射 | 手动映射 |
PARTIAL | 自动映射 | 自动映射 | 手动映射 |
FULL | 自动映射 | 自动映射 | 自动映射 |