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的时候,只用把可能产生冲突的那段代码包含就可以了,不要盲目的包含。
  • 相关阅读:
    IBM X3650 M4服务器安装centos找不到硬盘的解决方法
    页面头部title、description、keywords标签的优化
    SEO优化之Title 和 Meta 标签
    WPA字典锦集
    PIN码计算锦集
    神经网络入门 第6章 识别手写字体
    神经网络入门 第5章 实现多层神经网络BP算法
    神经网络入门 第4章 神经网络可以模拟任意函数
    神经网络入门 第3章 S函数
    神经网络入门 第2章 编写第一个神经元
  • 原文地址:https://www.cnblogs.com/sunxun/p/5664866.html
Copyright © 2011-2022 走看看