最近参与了一个老师的项目,项目后端选用了 Mybaits 进行数据库层的操作管理,书写 Mapper 文件期间出现了如题的错误。
我们知道,Mybatis 文件的数据库操作都是在 Mapper 文件中实现的,而 Mapper 文件的主体内容也就是 SQL 语句。
所以一般我在写 Mapper 文件中的方法前,会首先在 Navicat 中写 SQL 进行核验,同时也进行语句的修改调试。今天这个错误,发生在一个需要比较时间的需求背景下,我们知道在 SQL 语句中,对于时间的比较十分方便,我们只需要使用 <
/ <=
/ =
/ >
/ >=
这一类比较运算符直接操作即可。 于是,我再 Navicat 中书写了如下的 SQL 语句(部分)进行查询:
SELECT product_type type,IFNULL(COUNT(DISTINCT p.id), 0) sum
FROM product p, delivery d
WHERE
p.id = d.order_id AND
p.deadline < d.maildate AND
-- 其他条件省略
GROUP BY p.product_type
以上语句在 Navicat 中查询正常,但等转到了对应的 Mapper 文件中,却发生了错误,有红色波浪线出现在了 d.maildate AND
下方,鼠标放上去显示 :Tag name expected 。
经查询,在 XML 文件中,一些符号具有特殊的意义,所以需要进行替换或转义避免否则就会发生错误。>
不会,但是 <
却会。
因此,我们需要将 <
替换为 <
即可。替换后语句变为:
SELECT product_type type,IFNULL(COUNT(DISTINCT p.id), 0) sum
FROM product p, delivery d
WHERE
p.id = d.order_id AND
p.deadline < d.maildate AND
-- 其他条件省略
GROUP BY p.product_type
除 <
号可替换为,还有其余几种也可进行替换。>
虽然是合法可用的,但也是推荐使用实体引用来替换的哦。
实体引用 | 原字符 | 含义 |
---|---|---|
\> | > | greater than |
\< | < | less than |
\& | & | ampersand |
\' | ' | apostrophe |
\" | " | quotation mark |