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的时候,只用把可能产生冲突的那段代码包含就可以了,不要盲目的包含。
  • 相关阅读:
    实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
    期刊搜索问题——SCI、EI、IEEE和中文期刊
    面向对象分析与设计(C++)课堂笔记
    windows与VMware ubuntu虚拟机实现文件共享
    GDI+在绘制验证码中的使用
    【转】.net中快捷键的使用
    MD5加密“破解”在.NET平台实现最基本的理解
    UE4 Persona 骨架网格物体动画
    从零开始做3D地图编辑器 基于QT与OGRE
    TBB(Intel Threading Building Blocks)学习笔记
  • 原文地址:https://www.cnblogs.com/sunxun/p/5664866.html
Copyright © 2011-2022 走看看