Mybatis的自动映射无效:使用了鉴别器

导致无效的配置如下:

本人在学习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,才能是自动映射生效。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值