zoukankan      html  css  js  c++  java
  • ibatis配置xml文件中CDATA的用法

     ibatis作为一种半自动化的OR Mapping工具,其灵活性日益体现出来,越来越多的人都倾向于在项目中使用。由于Sql中经常有与xml规范相冲突的字符对xml映射文件的合法性造成影响。许多人都知道使用<![CDATA[   ]]>标记来避免冲突,但是在sql配置中有动态语句的时候,还是有一些细节需要特别注意的。

            在使用ibatis时,经常需要配置待执行的sql语句。使用过ibatis的朋友都知道,无可避免的都会碰到一些不兼容、冲突的字符,多数人也都知道用<![CDATA[   ]]>标记避免Sql中与xml规范相冲突的字符对xml映射文件的合法性造成影响。但是,如果在ibatis中使用了动态语句的时候,还是有一些细节需要注意。下面举例说明一下:
     
    环境:oracle、ibatis、java
     
    错误例1:符号“<=”会对xml映射文件的合法性造成影响
    [html] view plain copy
     
    <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>  

    错误例2:将整个sql语句用<![CDATA[   ]]>标记来避免冲突,在一般情况下都是可行的,但是由于该sql配置中有动态语句(where部分),将导致系统无法识别动态判断部分,导致整个sql语句非法。
     
    [html] view plain copy
     
    <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>  
     
     
    正确做法:缩小范围,只对有字符冲突部分进行合法性调整。
     
    [html] view plain copy
    1. <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>  
    总结:
    在用CDATA的时候,只用把可能产生冲突的那段代码包含就可以了,不要盲目的包含。
  • 相关阅读:
    灭霸-个人冲刺第四天
    单词统计
    第十周总结
    灭霸-个人冲刺第三天
    07-代码大全阅读笔记之一
    灭霸-个人冲刺第二天
    灭霸-个人冲刺第一天
    06-梦断代码阅读笔记之三
    团队项目-用户场景分析
    第九周总结
  • 原文地址:https://www.cnblogs.com/sunxun/p/5664866.html
Copyright © 2011-2022 走看看