鑑別器<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>