2013-10-02 147 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> 
相关问题