Mybatis 鉴别器 discriminator

版权声明:大家好,我是笨笨,笨笨的笨,笨笨的笨,转载请注明出处,谢谢! https://blog.csdn.net/jx520/article/details/87974975

Mybatis 鉴别器 discriminator

上官网的例子

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,它有两个引用类型属性 TestBTestC
我想查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

猜你喜欢

转载自blog.csdn.net/jx520/article/details/87974975