Welcome 微信登录

首页 / 数据库 / MySQL / ibatis配置xml文件中CDATA的用法

ibatis作为一种半自动化的OR Mapping工具,其灵活性日益体现出来,越来越多的人都倾向于在项目中使用。由于Sql中经常有与xml规范相冲突的字符对xml映射文件的合法性造成影响。许多人都知道使用<![CDATA[   ]]>标记来避免冲突,但是在sql配置中有动态语句的时候,还是有一些细节需要特别注意的。 在使用ibatis时,经常需要配置待执行的sql语句。使用过ibatis的朋友都知道,无可避免的都会碰到一些不兼容、冲突的字符,多数人也都知道用<![CDATA[   ]]>标记避免Sql中与xml规范相冲突的字符对xml映射文件的合法性造成影响。但是,如果在ibatis中使用了动态语句的时候,还是有一些细节需要注意。下面举例说明一下:环境:Oracle、ibatis、java 错误例1:符号“<=”会对xml映射文件的合法性造成影响
  1. <select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">  
  2. <![CDATA[    
  3. select id 
  4. from tableA a, 
  5.      tableB b 
  6.  <dynamic prepend="WHERE"> 
  7.  <isNotNull prepend="AND" property="startDate"> 
  8.   a.act_time >= #startDate#  
  9.   and a.act_time <= #endDate# 
  10.   and a.id = b.id  
  11.  </isNotNull>     
  12.  </dynamic>   
  13.   ]]>  
  14. </select>  
错误例2:将整个sql语句用<![CDATA[   ]]>标记来避免冲突,在一般情况下都是可行的,但是由于该sql配置中有动态语句(where部分),将导致系统无法识别动态判断部分,导致整个sql语句非法。
  1. <select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">    
  2. select id  
  3. from tableA a,  
  4.      tableB b  
  5.  <dynamic prepend="WHERE">  
  6.  <isNotNull prepend="AND" property="startDate">  
  7.   a.act_time >= #startDate#   
  8.   and a.act_time <= #endDate#  
  9.   and a.id = b.id   
  10.  </isNotNull>      
  11.  </dynamic>    
  12. </select>  
正确做法:缩小范围,只对有字符冲突部分进行合法性调整。 
  1. <select id="find" parameterClass="java.util.Map" resultClass="java.lang.Long">    
  2. select id  
  3. from tableA a,  
  4.      tableB b  
  5.  <dynamic prepend="WHERE">  
  6.  <isNotNull prepend="AND" property="startDate">  
  7.   a.act_time >= #startDate#   
  8.   <![CDATA[ and a.act_time <= #endDate#  ]]>  
  9.   and a.id = b.id   
  10.  </isNotNull>      
  11.  </dynamic>    
  12. </select>  
总结:在用CDATA的时候,只用把可能产生冲突的那段代码包含就可以了,不要盲目的包含。PL/SQL Developer 登陆分组管理 以及 保存用户名密码Oracle:listener does not currently know of SID given in connect descriptor相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数