我的MyBatis映射器XML文件中有两个选择,如下所示。我有三种情况:
getResultsA
getResultsB
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语句的情况下实现第三种方案?我目前通过两个单独的映射器调用实现此目的,然后在Java中使用list.addall(anotherList)
来合并结果。换句话说,我只需要合并两个选择的结果,结果图是相同的,我认为这应该是可能的。
答案 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>