mysql比较运算符导致Mapper文件运行报错解决方案

[1] 首先在编写mapper.xml的时候,涉及到时间范时间范围的区间变动,写完SQL语句后出现了一点小问题,简单记录下.

  select * from tableName
        where createTime >= CONCAT(DATE_FORMAT(DATE_SUB(now(), INTERVAL 1 DAY), '%Y-%m-%d'), ' 00:00:00')
         and createTime <= CONCAT(DATE_FORMAT(DATE_SUB(now(), INTERVAL 1 DAY), '%Y-%m-%d'), ' 06:00:00')
        group by xxx

[2] IDEA mybatis mapper文件提示有错误,如果忽略错误,跑本地测试跑不通,会报如下错误,很显然在文件解析的时候出现了问题,SAX根据DTD解析时的错误如下,其实也不难想象,本身的标签语言包含了<符号,在解析过程也会去匹配相应的 />,所以导致下面的标签<失效,SAX解析出现异常:

Cause: org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 27; 
The content of elements must consist of well-formed character data or markup.

[3] 根据IDEA的智能提示,将< 转成CDATA平文本格式,mapper文件不再提示错误 

where createTime >= CONCAT(DATE_FORMAT(DATE_SUB(now(), INTERVAL 100 DAY), '%Y-%m-%d'), ' 00:00:00') 
and createTime<![CDATA[ <]]>= CONCAT(DATE_FORMAT(DATE_SUB(now(), INTERVAL 1 DAY), '%Y-%m-%d'), ' 06:00:00')

 

[4] 跑测试后,出现错误如下:

Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax;
check the manual that corresponds to your MariaDB server version for the right 
syntax to use near '= CONCAT(DATE_FORMAT(DATE_SUB(now(), INTERVAL 1 DAY), '%Y-%m-%d'), ' 06:00:00')

 

[5] 可以看出这里抛出了SQL语法异常,那么正确的语句应该怎么写?正确的转换方式,并成功解决了标签与运算符混合的问题,这个解决方案有点像html里面的标签语言转换,本质是转义字符,不会去匹配标签开始或结束.

 

[6] tip:网上看到说转成平文本的CDATA,但在我这里没有作用.所以知道问题来源,解决问题的方法只是需要去针对问题罗列出解决方案而已.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值