iBatisで使いまわし

SQLを使ったアプリケーションを作成していると、同じ条件文が発生したりすることがあると思います。
例えば、件数を取得するSQLと情報自体を取得するSQLなどですね。

このような場合、iBatisでは、以下のように記述することで、同じ条件文を使いまわしたりすることができるようになります。

<sql id="userWhere"><dynamic prepend="WHERE"><isPropertyAvailable prepend="AND" property="AND_id_NULL">id IS NULL</isPropertyAvailable><isPropertyAvailable prepend="OR" property="OR_id_NULL">id IS NULL</isPropertyAvailable><isPropertyAvailable prepend="AND" property="AND_id_NOTNULL">id IS NOT NULL</isPropertyAvailable><isPropertyAvailable prepend="OR" property="OR_id_NOTNULL">id IS NOT NULL</isPropertyAvailable><isPropertyAvailable prepend="AND" property="AND_name_EQ">name = #name#</isPropertyAvailable><isPropertyAvailable prepend="AND" property="AND_name_LIKE">name like #name#</isPropertyAvailable></dynamic></sql>

<select id="getUser3" resultMap="resultUser" parameterClass="java.util.Map">SELECT ID AS id,NAME AS nameFROM USER_TABLE<include refid="userWhere" /></select>

<select id="getCountUser3" parameterClass="java.util.Map">SELECT COUNT(*)FROM USER_TABLE<include refid="userWhere" /></select>


<sql id=”userWhere”>と、<include refid=”userWhere” />の部分に注目してください。
<sql>の中に、複数回(今回は2回)発生するSQLのWHERE句に関する記述を入れてあります。
で、
<select>の方で、<include refid=”userWhere” />で、WHERE句の使いまわしを行っています。

各SQLを実行するための手段については、今までと変わりありませんので省略しますが、基本的な使い方は簡単なので、使うことを検討してみてください。
なお、今回はパラメータにjava.util.Mapを利用していますが、parameterClassを利用するよう設計した方が、パフォーマンスが向上します。

今回はWHERE句の部分を動的に生成し、使いまわしできるようにしましたが、動的にSQLを生成し、複数回同じSQLが発生する場合などに有効に活用できると思います。

ブログ内の関連する記事


コメント

このブログの人気の投稿

島へ移住の話【炊飯】

ドローンプログラミング体験教室を伊豆大島の小学校でしてきました

情報処理安全確保支援士登録証のカード型が届きました。