Mybatis结果映射

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 自动映射 自动映射 自动映射
上一篇:Mybatis 实体类映射出现null“坑”


下一篇:MyBatis学习06--resultType深入