1

以下に示すように、MyBatis マッパー XML ファイルに 2 つの選択があります。3 つのシナリオがあります。

  1. 最初の選択からのみ結果を取得 -getResultsA
  2. 2 番目の選択からのみ結果を取得する -getResultsB
  3. 最初の選択と 2 番目の選択の両方を組み合わせる -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 では、それぞれの選択を個別に使用できます。ユニオンを使用して新しい SQL ステートメントを作成することなく、3 番目のシナリオを実現するにはどうすればよいですか? 私は現在、2 つの別々のマッパー呼び出しによってこれを達成してlist.addall(anotherList)から、Java で結果をマージしています。言い換えれば、両方の選択からの結果をマージする必要があるだけで、結果マップが同じであれば、これは可能だと思います。

4

1 に答える 1

0

flag プロパティを追加することについて考えたことはありますMyParametersか? 次に、上記の 3 つの SQL をすべて 1 つにマージできます。

<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 に答える