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が発生する場合などに有効に活用できると思います。
コメント
コメントを投稿