xml(ibatis構成)におけるCDATAの使い方

2316 ワード

ibatisは半自動化OR Mappingツールとして、2010年にapache sofeware foundationからgoogle codeに移行し、mybatisと改名した.その柔軟性は日増しに現れ、プロジェクトで使用する傾向が高まっている.Sqlにはxml仕様と競合する文字がしばしば存在するため、xmlマッピングファイルの正当性に影響を与える.多くの人が知っています衝突を避けるためにタグが付けられていますが、sql構成に動的文がある場合は、やはりいくつかの詳細に注意する必要があります.そうでないと気を遣うのに苦労します.ibatisを使用する場合、実行するsql文を構成する必要があります.ibatisを使用したことがある友人は、避けられないことは互換性がなく、衝突する文字に遭遇することを知っています.多くの人もタグは、Sqlでxml仕様と競合する文字がxmlマッピングファイルの正当性に影響を及ぼすことを回避します.ただし、ibatisで動的文が使用されている場合は、いくつかの詳細に注意する必要があります.次に例を挙げて説明します.
環境:oracle、ibatis、java
エラー例1:シンボル「<=」はxmlマッピングファイルの正当性に影響します

<select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">  
select id
from tableA a,
     tableB b
 <dynamic prepend="WHERE">
 <isNotNull prepend="AND" property="startDate">
  a.act_time >= #startDate# 
  and a.act_time <= #endDate#
  and a.id = b.id 
 </isNotNull>    
 </dynamic>  
</select>
エラー例2:sql文全体を衝突を回避するためにタグを付けることは、一般的には可能ですが、このsql構成に動的文(where部分)があるため、システムが動的判断部分を認識できず、sql文全体が不正になります.

<select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">
<![CDATA[   
select id
from tableA a,
     tableB b
 <dynamic prepend="WHERE">
 <isNotNull prepend="AND" property="startDate">
  a.act_time >= #startDate# 
  and a.act_time <= #endDate#
  and a.id = b.id 
 </isNotNull>    
 </dynamic>  
  ]]>
</select>
正しい方法:範囲を縮小し、文字の衝突部分のみを合法的に調整します.

<select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">  
select id
from tableA a,
     tableB b
 <dynamic prepend="WHERE">
 <isNotNull prepend="AND" property="startDate">
  a.act_time >= #startDate# 
  <![CDATA[ and a.act_time <= #endDate#  ]]>
  and a.id = b.id 
 </isNotNull>    
 </dynamic>  
</select>