在Ibatis的select语句中基于列值的动态查询?

时间:2011-07-18 07:18:01

标签: dynamic ibatis

我需要在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有可能吗?

希望你理解我的问题。如果问题不明确,我很乐意重复这一点,以便让你清楚。

提前致谢。

1 个答案:

答案 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>

如果您在上述方式遇到错误,请回复...