iBatisで動的SQL
iBatisで動的なSQLを発行する方法ですが、sqlMap.xmlの内容を編集するだけです。
以下に簡単な例をあげておきます。(sqlMap内のselectタグだけ記載しています)
<select id="getUser2" resultMap="resultUser"> SELECT ID AS id, NAME AS name FROM USER_TABLE <dynamic prepend="WHERE"> <isGreaterThan property="id" compareValue="0"> ID=#id# <isGreaterThan> </dynamic> </select>
以下に簡単な例をあげておきます。(sqlMap内のselectタグだけ記載しています)
<select id="getUser2" resultMap="resultUser"> SELECT ID AS id, NAME AS name FROM USER_TABLE <dynamic prepend="WHERE"> <isGreaterThan property="id" compareValue="0"> ID=#id# <isGreaterThan> </dynamic> </select>
やはり簡単で、見ればわかるような内容です。
ちょっと補足すると、
<dynamic prepend="WHERE">
このタグ内の情報が動的に生成されるよという宣言みたいなものです。
<isGreaterThan property="id" compareValue="0">
idの値が0よりも大きい場合に、タグ内の情報が追加されます。
isGreaterThan以外にも以下のような比較が可能です。
さらに上記以外にも、単一エレメントに対するプロパティの比較が可能です。
これらを組み合わせて動的にSQLを発行することができます。
パラメータ等の情報が変わらなければ、Java側は修正せずに発行するSQLを変更することが可能となります。
動的SQLを簡単に作れ、さらに簡単に修正できるので、試行錯誤しながら実行してみると良いかもしれません。
ちょっと補足すると、
<dynamic prepend="WHERE">
このタグ内の情報が動的に生成されるよという宣言みたいなものです。
<isGreaterThan property="id" compareValue="0">
idの値が0よりも大きい場合に、タグ内の情報が追加されます。
isGreaterThan以外にも以下のような比較が可能です。
- isEqual
- isNotEqual
- isGreaterThan
- isGreaterEqual
- isLessThan
- isLessEqual
さらに上記以外にも、単一エレメントに対するプロパティの比較が可能です。
- isPropertyAvailable
- isNotPropertyAvailable
- isNull
- isNotNull
- isEmpty
- isNotEmpty
これらを組み合わせて動的にSQLを発行することができます。
パラメータ等の情報が変わらなければ、Java側は修正せずに発行するSQLを変更することが可能となります。
動的SQLを簡単に作れ、さらに簡単に修正できるので、試行錯誤しながら実行してみると良いかもしれません。


