您的位置:首页 > 其它

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

2017-12-19 00:00 239 查看
第一种方法:用转义字符(注:对大小写敏感! )

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

SELECT * FROM test WHERE 1 = 1 AND start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE

附:XML转义字符

显示结果描述实体名称实体编号
空格  
<小于号<<
>大于号>>
&和号&&
"引号""
'撇号 ' (IE不支持)'
第二种方法:<![CDATA[ ]]>

因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 ,如下:
<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语句非法.应该缩小范围,只对有字符冲突部分进行合法性调整

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

<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>

正确的形式:

<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的以上两种写法,都是可以的

LIKE '%'#{acctno}'%'

LIKE CONCAT('%',#{acctno},'%')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息