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なんてもう使うなよ的な話かもしれませんが・・・。
コメント
コメントを投稿