MyBatis 在xml文件中处理大于号小于号的方法

第一种方法:用转义字符(注:对大小写敏感! )java

用了转义字符把>和<替换掉,而后就没有问题了。sql

SELECT * FROM test WHERE 1 = 1 AND start_date  &lt;= CURRENT_DATE AND end_date &gt;= CURRENT_DATEspa

附:XML转义字符  code

显示结果 描述 实体名称 实体编号
  空格 &nbsp; &#160;
< 小于号 &lt; &#60;
> 大于号 &gt; &#62;
& 和号 &amp; &#38;
" 引号 &quot; &#34;
' 撇号  &apos; (IE不支持) &#39;

第二种方法:<![CDATA[ ]]>xml

由于这个是xml格式的,因此不容许出现相似“>”这样的字符,可是均可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 ,以下:get

<update id="reduceNumber">
    UPDATE seckill
    SET number = number-1
    WHERE seckill_id=#{seckillId}
    AND start_time <![CDATA[ <= ]]> #{killTime} 
    AND end_time >= #{killTime}
    AND number > 0;
</update>

注意点:有动态语句(where,if)的状况,where,if 条件不能放在<![CDATA[ ]]>中,不然将致使没法识别动态判断部分,致使整个sql语句非法.应该缩小范围,只对有字符冲突部分进行合法性调整table

错误的形式:如下where 放在<![CDATA[ ]]>中class

<select id="getAccountErrorCount" resultType="int" parameterType="map">  
    <![CDATA[ 
    select count(*) from t_acctreg_accounterror 
    <where> 
        <if test="enddate != null and enddate != ''"> 
            createdate <= #{enddate} 
        </if> 
        <if test="acctno != null and acctno != ''"> 
            AND acctno LIKE '%'#{acctno}'%' 
        </if> 
    </where> 
    ]]>  
</select>  

正确的形式:test

<select id="getAccountErrorCount" resultType="int" parameterType="map">  
    select count(*) from t_acctreg_accounterror  
    <where>  
        <if test="enddate != null and enddate != ''">  
            <![CDATA[createdate <= #{enddate}]]>  
        </if>  
        <if test="acctno != null and acctno != ''">  
            <![CDATA[AND acctno LIKE CONCAT('%',#{acctno},'%')]]>  
        </if>  
    </where>  
</select>

补充说明:like的以上两种写法,都是能够的date

LIKE '%'#{acctno}'%'

LIKE CONCAT('%',#{acctno},'%')

相关文章
相关标签/搜索