iBatisのDynamicタグを使う際の注意点

iBatisのDynamicタグを使う際の注意点



iBatisなんて使ってる人いないかもですし、

MyBatisもそうなのか知りませんが、

今日つまずいたのでメモ。



isNotEmptyのprependを使った



WHERE句の直後に来るかもしれないところで、

必要だったのでprependを使いました。



SELECT a,b,c from sagyoTable
<Dynamic prepend="WHERE">
<isNotEmpty prepend="AND" property="ymdFrom">
sagyoYmd >= #ymdFrom#
</isNotEmpty>
<isNotEmpty prepend="AND" property="ymdTo">
sagyoYmd <= #ymdTo#
</isNotEmpty>
</Dynamic>



まぁ、よくある使い方だと思います。

これで実行すると、WHEREはつくけど何故かANDが付かない。

書き方が悪いのかと思っていろいろ書き換えてみましたが、それでもうまくいかない。

なぜだ、なぜなんだ・・・・。



おや、他のとこでも同じプロパティを使ってるぞ・・・



よくよく見ると、同じプロパティを別のとこでも使ってる。

それも、使い方が違う。

具体的には、こんな感じ。



 SELECT a,b,c from sagyoTable WHERE A = B
<isNotEmpty property="ymdFrom">
AND sagyoYmd >= #ymdFrom#
</isNotEmpty>
<isNotEmpty property="ymdTo">
AND sagyoYmd <= #ymdTo#
</isNotEmpty>
��~~



まさか、これに引きずられているのではあるまいか・・・。

そんなまさかと思いつつ、別の場所の書き方を変える。



 SELECT a,b,c from sagyoTable WHERE A = B
<isNotEmpty prepend="AND" property="ymdFrom">
sagyoYmd >= #ymdFrom#
</isNotEmpty>
<isNotEmpty prepend="AND" property="ymdTo">
sagyoYmd <= #ymdTo#
</isNotEmpty>
��~~



動いた・・・



結論としては、同じプロパティを見るタグは同一のPrependを指定しておかないと、

別の場所の記述に引っ張られる可能性があるらしい。

ただ、どんなときに引っ張られるのかまでは検証できてない。

そもそも、iBatisなんてもう使うなよ的な話かもしれませんが・・・。



コメント

人気の投稿