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 语句?我目前通过两个单独的映射器调用来实现这一点,然后list.addall(anotherList)在 Java 中使用来合并结果。换句话说,我只需要合并两个选择的结果,结果映射相同,我认为这应该是可能的。

4

1 回答 1

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>
于 2014-01-17T03:21:52.320 回答