iBATIS:Tips 同じSQLをまとめる
SQLMapのXMLを書いていると同じSQLが何度も出現する場合があります。
例えば、検索結果の件数と検索結果を取得したい場合などそんな場合、
同じSQLをまとめておいて<statement/>の中から参照することができます。
<select id="findGuitar" resultMap="guitarResult" parameterClass="string">
SELECT ID, NAME, MAKER_NAME FROM GUITAR
WHERE ID = #value#
</select>
<select id="findGuitarCount" resultClass="int" parameterClass="string">
SELECT COUNT(*) FROM GUITAR
WHERE ID = #value#
</select>
という2つのSQLがあったとします。
上記を比較すると
WHERE ID = #value#の部分が共通です。
そこで、下記のようにまとめます。
<sql id="whereFragment">WHERE ID = #value#
</sql>
<select id="findGuitar" resultMap="guitarResult" parameterClass="string">
SELECT ID, NAME, MAKER_NAME FROM GUITAR
<include refid="whereFragment"/>
</select>
<select id="findGuitarCount" resultClass="int" parameterClass="string">
SELECT COUNT(*) FROM GUITAR
<include refid="whereFragment"/>
</select>
こうしておけば複雑なSQLもすっきりします。
また、上記のようにパラメータを含むフラグメントでも問題なく実行できます。
別のSQL MAPファイルに定義されたフラグメントもネームスペースを使用すれば
参照できるようです。