xml文件中SQL语句的大于号、小于号、等于号的转义问题

使用小于号或小于等于号的场景

<delete id="delOvertimeLog" parameterType="java.lang.Integer">
    DELETE FROM operate_log
    WHERE operate_time < CURDATE() - INTERVAL #{logCleanTime} DAY
</delete>

现象:会报解析异常

Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 53; 元素内容必须由格式正确的字符数据或标记组成。
    at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:259) ~[mybatis-3.4.4.jar:3.4.4]
    at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:125) ~[mybatis-3.4.4.jar:3.4.4]
    at org.apache.ibatis.builder.xml.XMLMapperBuilder.<init>(XMLMapperBuilder.java:78) ~[mybatis-3.4.4.jar:3.4.4]
    at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:520) ~[mybatis-spring-1.3.1.jar:1.3.1]
    ... 54 common frames omitted

解决方案:

<delete id="delOvertimeLog" parameterType="java.lang.Integer">
    DELETE FROM operate_log
    WHERE operate_time &lt; CURDATE() - INTERVAL #{logCleanTime} DAY
</delete>

使用大于号的场景

<delete id="delOvertimeLog" parameterType="java.lang.Integer">
    DELETE FROM operate_log
    WHERE operate_time > CURDATE() - INTERVAL #{logCleanTime} DAY
</delete>

现象:正常执行,没有错误

总结

如果用小于号(<) 或者小于等于号(<=)则必须转义,其余可以不转义。因为Mapper.xml 文件里 < (小于)号 ,  >(大于)号 ,会被认为是括号。 

附录

xml转义字符
转义代码字符含义
&lt;<小于号
&gt;>大于号
&amp;&
&apos;'单引号
&quot;"双引号
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值