2013-10-02 148 views
1

我的MyBatis映射器XML文件中有兩個選擇,如下所示。我有三種情形:將兩個不同選擇的結果合併爲一個獲得結果集

  1. 獲取僅從結果的第一選擇 - getResultsA
  2. 獲取結果僅來自第二個選擇 - getResultsB
  3. 合併第一和第二選擇 - getResultsAAndB

這裏是我的XML:

<select id="getResultsA" resultMap="myResultMap" parameterType="MyParameters"> 
    <!-- select statement 1 --> 
</select> 

<select id="getResultsB" resultMap="myResultMap" parameterType="MyParameters"> 
    <!-- select statement 2 --> 
</select> 

<select id="getResultsAAndB" resultMap="myResultMap" parameterType="MyParameters"> 
    <!-- NEED TO MERGE RESULTS FROM BOTH getResultsA & getResultsB--> 
</select> 

對於情景1和2,我可以分別使用各自的選擇。如何在不必使用union編寫新SQL語句的情況下實現第三種方案?我目前通過兩個獨立的mapper調用來實現這一點,然後使用Java中的list.addall(anotherList)合併結果。換句話說,我只需要合併來自選擇和結果地圖的結果,我認爲這應該是可能的。

+0

我懷疑有任何通用的解決了這個其他的是你已經提到(SQL'UNION'或Java的'中的addAll()')的。 請發表您的選擇陳述,也許存在一些針對特定問題的解決方案。 –

回答

0

你有沒有想過在你加入一個旗幟屬性MyParameters?然後你就可以合併所有上述3個SQLS爲一個: -

<select id="getResultsAOrBOrAB" resultMap="myResultMap" parameterType="MyParameters"> 
    SELECT * FROM TABLE 
    <trim prefix="WHERE" prefixOverrides="OR"> 
     <if test="flag == 'A' or flag == 'AB'"> 
     <!-- criteria statement 1 --> 
     </if> 
     <if test="flag == 'B' or flag == 'AB'"> 
     OR <!-- criteria statement 2 --> 
     </if> 
</select> 
相關問題