鉴别器<discriminator/>
鉴别器,可以简单的理解为在<resultMap/>
中的swith:case
语句。
鉴别器的结构
<discriminator javaType="int" column="vehicle_type">
<case value="1" resultMap="carResult"/>
<case value="2" resultMap="truckResult"/>
<case value="3" resultMap="vanResult"/>
<case value="4" resultMap="suvResult"/>
</discriminator>
上面的例子是说,vehicle_type这一列是int类型,根据vehicle_type值的不同,有以下四种行为。
当vehicle_type的值为1时,使用craResult进行封装;
当vehicle_type的值为2时,使用truckResult进行封装…
必要的属性
对于<discriminator>
来说,它的两个必要的属性就是javaType
和column
,它们相当于指定了switch(x)
中x的类型,以及它在结果集的哪列。
对于<case>
来说,它也有两个必要的属性,value
,相当于switch-case中的case :
。第二个属性是resultMap
或者resultType
举例(摘自官方文档)
<resultMap id="vehicleResult" type="Vehicle">
<id property="id" column="id" />
<result property="vin" column="vin"/>
<result property="year" column="year"/>
<result property="make" column="make"/>
<result property="model" column="model"/>
<result property="color" column="color"/>
<discriminator javaType="int" column="vehicle_type">
<case value="1" resultMap="carResult"/>
<case value="2" resultMap="truckResult"/>
<case value="3" resultMap="vanResult"/>
<case value="4" resultMap="suvResult"/>
</discriminator>
</resultMap>
<resultMap id="vehicleResult" type="Vehicle">
<id property="id" column="id" />
<result property="vin" column="vin"/>
<result property="year" column="year"/>
<result property="make" column="make"/>
<result property="model" column="model"/>
<result property="color" column="color"/>
<discriminator javaType="int" column="vehicle_type">
<case value="1" resultType="carResult">
<result property="doorCount" column="door_count" />
</case>
<case value="2" resultType="truckResult">
<result property="boxSize" column="box_size" />
<result property="extendedCab" column="extended_cab" />
</case>
<case value="3" resultType="vanResult">
<result property="powerSlidingDoor" column="power_sliding_door" />
</case>
<case value="4" resultType="suvResult">
<result property="allWheelDrive" column="all_wheel_drive" />
</case>
</discriminator>
</resultMap>