ibatisはsqlを再利用することによって
SqlMap xmlを書くと、where文や制約などのSQLクリップが繰り返されることがよくあります.iBATISは、これらの重複フラグメントを多重化するための強力なラベルを提供しています.簡単な例として、いくつかのフィールドを取得し、統計したいと考えています.
通常、次のように書きます.
重複フラグメントを除去するために、「sql」および「include」ラベルを使用します.【sql】ラベルは重複フラグメントを含むために使用され、【include】ラベルはフラグメントを導入するために使用される.
また、isNotNullで属性条件を判断することもできます.これにより、where条件クエリーの再利用が可能になります.
重要な点は、参照するsqlラベルをselect上に定義する必要があります.そうしないと、クエリーはできません.私が使っている間にこの問題に遭遇しました.
通常、次のように書きます.
<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上に定義する必要があります.そうしないと、クエリーはできません.私が使っている間にこの問題に遭遇しました.