版权声明:大家好,我是笨笨,笨笨的笨,笨笨的笨,转载请注明出处,谢谢! https://blog.csdn.net/jx520/article/details/87974975
上官网的例子
discriminator
相当于一个 switch
语句。能判断条件,然后返回相应的 resultMap
car, truck, van, suv
都是 Vehicle
,判断出具体什么车型,往它们特有的属性中注入查寻结果。
<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>
<!-- 如果类型是 Car 才会有 doorCount 属性,查出来的结果注入给它才有意义 -->
<resultMap id="carResult" type="Car" extends="vehicleResult">
<result property="doorCount" column="door_count" />
</resultMap>
<!-- 其它 Result ... -->
另一种用法
比如我有对象 TestA
,它有两个引用类型属性 TestB
,TestC
我想查A关联B时,B属性有值,C 为 null, 查A关联C时,C属性有值,B 为 null (返回类型始终为 TestA
)
<!-- 按推广类型判断 association 哪个属性 -->
<resultMap id="TestResultMap" type="testA">
<id column="test_id" jdbcType="BIGINT" property="testId" />
<discriminator jdbcType="INTEGER" javaType="int" column="test_type">
<case value="1" resultType="testA">
<association property="b" javaType="testB" />
</case>
<case value="2" resultType="testA">
<association property="c" javaType="testC" />
</case>
</discriminator>
</resultMap>
<select id="selectWithTestB" resultMap="TestResultMap" >
SELECT ta.*, tb.test_name, tb.test_remark
FROM test_a AS ta
LEFT JOIN test_b AS tb ON ta.ref_id = tb.test_id
WHERE ta.test_type = #{testType}
</select>
<select id="selectWithTestC" resultMap="TestResultMap" >
SELECT ta.*, tc.test_name, tc.test_remark
FROM test_a AS ta
LEFT JOIN test_c AS tc ON ta.ref_id = tc.test_id
WHERE ta.test_type = #{testType}
</select>
官方文档
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps