将两个不同选择的结果合并到一个获取结果集

时间:2013-10-02 16:17:17

标签: java mybatis ibatis

我的MyBatis映射器XML文件中有两个选择,如下所示。我有三种情况:

  1. 仅从第一个选择中获得结果 - getResultsA
  2. 仅从第二个选择中获得结果 - getResultsB
  3. 合并第一个和第二个选择 - getResultsAAndB
  4. 这是我的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语句的情况下实现第三种方案?我目前通过两个单独的映射器调用实现此目的,然后在Java中使用list.addall(anotherList)来合并结果。换句话说,我只需要合并两个选择的结果,结果图是相同的,我认为这应该是可能的。

1 个答案:

答案 0 :(得分:0)

您是否考虑过在MyParameters添加旗帜属性?然后,您可以将以上3个SQL合并为一个: -

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