[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,但在我这里没有作用.所以知道问题来源,解决问题的方法只是需要去针对问题罗列出解决方案而已.