iBatisのSQL記述の共通部分の共有

一覧ページング処理では件数の取得を先ず行ってから部分的な一覧の取得を行うことが多いが、その場合SQLの条件部分は全く同じになる。
そのようなSQLの共通部分を別に定義し、参照することで"全く同じ"を保証することが出来る。

  <select id="getAllCount" resultClass="java.lang.Integer">
	SELECT COUNT(*) as num
	  FROM suser
	 WHERE name like #name#
  </select>

  <select id="getAll"  resultMap="result">
	SELECT id,name,password
	  FROM suser
	 WHERE name like #name#
  	 ORDER by id
  </select>

この記述は次のように書く事で共通部分を括り出せる。

  <sql id="nameFilterList">
	  FROM suser
	 WHERE name like #name#
  </sql>
  
  <select id="getAllCount" resultClass="java.lang.Integer">
	SELECT COUNT(*) as num
	  <include refid="nameFilterList"/>
  </select>

  <select id="getAll"  resultMap="result">
	SELECT id,name,password
	  <include refid="nameFilterList"/>
  	 ORDER by id
  </select>

ちょっとTIPS:includeを展開した後にクエリーとして評価されるので単純に共通部分の文字列を括り出す事で問題ない