ibatisはsqlを再利用することによって


SqlMap xmlを書くと、where文や制約などのSQLクリップが繰り返されることがよくあります.iBATISは、これらの重複フラグメントを多重化するための強力なラベルを提供しています.簡単な例として、いくつかのフィールドを取得し、統計したいと考えています.
通常、次のように書きます.
<select id="selectCount" resultClass="int">      
  SELECT COUNT(*) AS total       
  FROM items       
  WHERE id = 6  and groupId = 4
select>      
<select id="selectOne" resultClass="Item">      
  SELECT id, name       
  FROM items       
   WHERE id = 6  and deleted= true      
select>

 
重複フラグメントを除去するために、「sql」および「include」ラベルを使用します.【sql】ラベルは重複フラグメントを含むために使用され、【include】ラベルはフラグメントを導入するために使用される.
<sql id="dao_where_statement">
  <dynamic prepend="where">
  <isNotNull prepend="and" property="id">
         id = #id#
       </isNotNull>
       <isNotNull prepend="and">
         groupId = #groupId#
       </isNotNull>
       <isNotNull prepend="and" property="deleted">
         DELETED = #deleted#
       </isNotNull>
     </dynamic>
   </sql> 

また、isNotNullで属性条件を判断することもできます.これにより、where条件クエリーの再利用が可能になります.
     
<select id="selectCount" parameterClass="int" resultClass="int">      
  SELECT COUNT(*) AS total  from items       
  <include refid="dao_where_statement"/>      
<select> 

 
重要な点は、参照するsqlラベルをselect上に定義する必要があります.そうしないと、クエリーはできません.私が使っている間にこの問題に遭遇しました.