我需要在ibatis中进行继承映射。在Ibatis文档中,我学到的是,我们可以比较列的值来调用resultMap的discriminator标签内的子图,如下所示:
<resultMap id="map">
<discriminator javaType="java.lang.Integer" column="type">
<subMap resultMap="submap1" value="1" />
<subMap resultMap="submap2" value="2"/>
<subMap resultMap="submap3" value="3"/>
</discriminator>
</resultMap>
在上面的结果图中,子图将列映射到不同的对象。
但我想比较select语句本身的列值,以便我可以获得所需的列。一些如下:
<select id="load" resultMap="map">
select mt.id,mt.name, mt.type
<here we have to check the value of type column returned dynamically>
<if type = "1">
table1.column1, table1.column2 ... table1.columnN
</if>
<if type = "2">
table2.column1, table2.column2 ... table2.columnN
</if>
</here>
from main_table mt
LEFT OUTER JOIN TABLE1 table1 ON mt.id=table1
LEFT OUTER JOIN TABLE2 table2 ON mt.id=table2
where mt.id=#value#
</select>
这只是我的要求的算法。在Ibatis有可能吗?
希望你理解我的问题。如果问题不明确,我很乐意重复这一点,以便让你清楚。
提前致谢。
答案 0 :(得分:2)
您可以尝试以下方式吗?
<select id="load" resultMap="map">
select mt.id,mt.name, mt.type
<if type = "1">
table1.column1, table1.column2 ... table1.columnN
</if>
<if type = "2">
table2.column1, table2.column2 ... table2.columnN
</if>
from main_table mt
<if type = "1">
LEFT OUTER JOIN TABLE1 table1 ON mt.id=table1
</if>
<if type = "2">
LEFT OUTER JOIN TABLE2 table2 ON mt.id=table2
</if>
where mt.id=#{value}
</select>
如果您在上述方式遇到错误,请回复...