1.用小於或小於等於的場景
代碼1:
<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 < curdate() - interval #{logCleanTime} day </delete>
代碼2:
<delete id="delOvertimeLog" parameterType="java.lang.Integer">
delete from operate_log where operate_time > curdate() - interval #{logCleanTime} day
</delete>
現象:正常執行,沒有錯誤
總結:如果用小於號(<) 或者(<=)就必須轉義,其余可以不轉義,因為Mapper.xml 文件里 < (小於)號 , >(大於)號 ,會被認為是括號。
附上: