导致无效的配置如下:
本人在学习mybatis的时候,进行了如下结果映射(resultMap)
<resultMap id="user" type="user" autoMapping="true">
<id column="id" property="id"/>
<discriminator javaType="int" column="id">
<case value="1">
<association property="car" column="" javaType="car">
<id column="car_id" property="id"/>
<result column="brand" property="brand"/>
<result column="color" property="color"/>
<result column="price" property="price"/>
</association>
</case>
<case value="2">
<collection property="cars" javaType="list" ofType="car">
<id column="car_id" property="id"/>
<result column="brand" property="brand"/>
<result column="color" property="color"/>
<result column="price" property="price"/>
</collection>
</case>
</discriminator>
</resultMap>
User类定义如下:
@Data
public class User {
private Integer id;
private String name;
private String password;
private Integer age;
private List<Car> cars;
private Car car;
}
配置之后发现user对象的name、password、age等属性为null,说明自动映射无效。手动配置开启再运行,依然无效。
最后通过将自动映射级别配置到FULL
,自动映射才有效:
<setting name="autoMappingBehavior" value="FULL"/>
之后,我推测失效原因是我使用了鉴别器,于是我注释掉鉴别器,将自动映射基本调回PARTIAL
<setting name="autoMappingBehavior" value="PARTIAL"/>
将鉴别器注释掉:
<resultMap id="user" type="user" autoMapping="true">
<id column="id" property="id"/>
<!--<discriminator javaType="int" column="id">-->
<!--<case value="1">-->
<association property="car" column="" javaType="car">
<id column="car_id" property="id"/>
<result column="brand" property="brand"/>
<result column="color" property="color"/>
<result column="price" property="price"/>
</association>
<!--</case>-->
<!--<case value="2">-->
<!--<collection property="cars" javaType="list" ofType="car">-->
<!--<id column="car_id" property="id"/>-->
<!--<result column="brand" property="brand"/>-->
<!--<result column="color" property="color"/>-->
<!--<result column="price" property="price"/>-->
<!--</collection>-->
<!--</case>-->
<!--</discriminator>-->
</resultMap>
再次测试,结果如下:
说明鉴别器真的影响了自动映射。
这个时候我又思考:association和collection会不会影响自动映射起效呢?
添加association元素再次测试,结果如下:
显然association不会影响自动映射,至于collection,我懒得写了,告诉你们:也不会影响自动映射。
总结
使用了鉴别器的resultMap,必须将自动映射级别设置为FULL
,才能是自动映射生效。