- - PR -
iBatis:dynamic タグ内に静的な条件は書けない?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-11-17 21:30
はじめまして。
O/R マッピングツールとして iBatis を使っているのですが、SQL で使用する dynamic タグについて教えてください。 下記のように、dynamic タグで WHERE 句を生成した場合も、3 つ目の「COL_3 = ?」は必ず有効になるようにしたいのですが、指定方法が分からず困っています。 <dynamic prepend="where"> <isNotEmpty prepend="and" property="prop1">COL_1 = #prop1#</isNotEmpty> <isNotEmpty prepend="and" property="prop2">COL_2 = #prop2#</isNotEmpty> <is... prepend="and" property="prop3">COL_3 = #prop3#</is...> </dynamic> 以下は自分なりに考えた代替案ですが、どれもイマイチなのです。 ■案1 <isParameterPresent> タグを使用する。 <isParameterPresent prepend="and">COL_3 = #prop3#</isParameterPresent> -> Dao にて queryForList("sqlId", null) と指定された場合に結局は無効となってしまう。 ■案2 条件句の書き方を以下のようにする。 WHERE COL_3 = #prop3# <dynamic> <isNotEmpty prepend="and" property="prop1" removeFirstPrepend="false">COL_1 = #prop1#</isNotEmpty> <isNotEmpty prepend="and" property="prop2" removeFirstPrepend="false">COL_2 = #prop2#</isNotEmpty> </dynamic> -> 全ての条件に removeFirstPrepend="false" の指定が必要になる。 -> 静的な条件は必ず WHERE 句の先頭に書かなくてはならないという制約が増える。 -> is~ タグをネストした場合、子供の is~ タグの中で静的な条件を指定することができない。 ■案3 下記のようにタグを自作できないか? <static prepend="and">COL_3 = #prop3#</static> -> SqlTagHandlerFactory クラスの実装を見る限り、タグの拡張はムリっぽい。。 もし良い解決策がありましたら、ぜひご教授お願い致します。 [ メッセージ編集済み 編集者: ジョン 編集日時 2005-11-18 00:26 ] |
|
投稿日時: 2005-11-30 14:05
where COL_3 = #prop3#
<dynamic prepend="and"> <isNotEmpty prepend="and" property="prop1">COL_1 = #prop1#</isNotEmpty> <isNotEmpty prepend="and" property="prop2">COL_2 = #prop2#</isNotEmpty> </dynamic> で、いけると思いますよ。 |
1