2017-07-31 4 views
0

MyBatisで、を静的にパラメータ化した<sql>reusable fragments<if>dynamic SQLを組み合わせることは可能ですか? 静的の値照会する方法MyBatis <sql>フラグメントの静的パラメータの値をクエリする方法はありますか?

(Javaメソッドから来る= ないを、しかしマッパーXMLに直接入力)MyBatisの<sql>フラグメントのパラメータ?

質問はMyBatisの中でString値を比較する方法ないですが、どのようにクエリ静的パラメータの値。

スタティックパラメータsourceを使用して、再利用可能な要素select-partを呼び出しようとしています。

私は<if test="...">条件を書くのさまざまな方法を試してみましたが、すべて失敗:

  • <if test="source == 'active'">
  • <if test="${source} == 'active'">
  • <if test="#{source} == 'active'">

簡素化マッパーXMLは、このようなものです:

<sql id="select-part"> 
    SELECT d.field1, d.field2, ..., d.fieldN 
    <if test="${source} == 'active'"> 
     , null AS archivedDate 
     FROM active_table d 
    </if> 
    <if test="${source} == 'archive'"> 
     , d.achived AS archivedDate 
     FROM archive_table d 
    </if> 
    LEFT JOIN ... 
    ORDER BY ... 
</sql> 

<select id="fetchData" resultMap="Data"> 
    <include refid="select-part"> 
     <property name="source" value="active"/> 
    </include> 
    UNION ALL 
    <include refid="select-part"> 
     <property name="source" value="archive"/> 
    </include> 
</select> 
+0

https://stackoverflow.com/questions/19450304/mybatis-compare-string-value-using-dynamic-query equalを使用するようにしてください – StanislavL

+0

@StanislavL質問は文字列を比較する方法ではなく、静的パラメータ。問題は、ソース変数の値を照会する方法です。値がJavaメソッドから来た場合と同じように動作しません。私は質問を編集してタイトルを変更しました。 –

答えて

1

残念ながら、現在の実装では、SQLフラグメントのXML属性のプレースホルダを置き換えないというバグがあります。テキストノード内のプレースホルダだけが置き換えられます。私はこれを修正すべき実装のバグと考えています。私は私のフォークにそれを実装しました:https://github.com/kmoco2am/mybatis-3と私は元のリポジトリにプッシュしようとします。

+0

プルのリクエストはここをクリックしてください: https://github.com/mybatis/mybatis-3/pull/1070 –

関連する問題