0

変数がnullでなく、ゼロより大きい場合にのみ実行される動的SQLステートメントを使用したいと思います。このような:

<isNotNull prepend="AND" property="ProprietaryId">
    <isGreaterThan prepend="AND" property="ProprietaryId" compareValue="0">
        G.PROPRIETARY_ID = #ProprietaryId#
    </isGreaterThan>
</isNotNull>

ただし、2つの'ANDを付加することはありません。

ドキュメントを読みましたが、良い例は見つかりませんでした。

4

4 に答える 4

6

この問題を回避するために、「追加」機能を使用することはほとんどありませんが、代わりに次のようなSQLを記述します。

WHERE 1=1
<isNotNull property="ProprietaryId">
    <isGreaterThan property="ProprietaryId" compareValue="0">
    AND G.PROPRIETARY_ID = #ProprietaryId#
    </isGreaterThan>
</isNotNull>
于 2012-07-26T14:18:15.673 に答える
3

同じ答えを探しているときに、この質問に出くわしました。効果的ではありますが、このソリューションは私を悩ませたので、iBATISドキュメントをもう少し調べて、この例に気づきました。

  <dynamic prepend="where">
    <isGreaterThan prepend="and" property="id" compareValue="0">
      ACC_ID = #id#
    </isGreaterThan>
    <isNotNull prepend="and" property="lastName">
      ACC_LAST_NAME = #lastName#
    </isNotNull>
  </dynamic>

条件の1つだけが真の場合、余分な「and」がWHERE句に含まれる可能性があると思われるかもしれませんが、動的タグを使用する場合、iBATISはこれを防ぐのに十分賢いようです。それは私のために働きます(この場合はiBATIS 2.3.0を使用します)。

于 2013-07-02T17:16:37.540 に答える
1

その未来からの私。親要素は最初の子の先頭をオーバーライドします。そのため、先頭は親の先頭isGreaterThanによって上書きされるため、コードは正常に機能しますisNotNull

ドキュメントから:

prepend属性はコードの一部であり、必要に応じて親要素のprependによって自由にオーバーライドできます。上記の例では、「where」プリペンドが最初の真の条件付きプリペンドをオーバーライドします。これは、SQLステートメントが正しく作成されるようにするために必要です。たとえば、最初の真の条件の場合、ANDは必要なく、実際にはステートメントが壊れます。

于 2015-02-13T15:50:36.907 に答える
0
<isNotNull property="ProprietaryId">
    <isGreaterThan prepend="AND" property="ProprietaryId" compareValue="0">
        G.PROPRIETARY_ID = #ProprietaryId#
    </isGreaterThan>
</isNotNull>

最初の先頭を削除するだけで機能します

于 2019-07-25T09:44:31.800 に答える