2011-07-18 41 views
0

我需要在ibatis中有繼承映射。在ibatis的文檔,我所學到的是,我們可以比較的列的值來調用的結果映射的鑑別標籤中的子圖像如下:基於Ibatis select語句中列值的動態查詢?

<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有可能嗎?

希望你明白我的問題。如果問題不明確,我很樂意重新編輯,以便讓您清楚。

在此先感謝。

回答

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> 

如果你面對上述方式有些錯誤請回復......