[Mybatis] xxxMapper.xml 报错 Tag name expected

一杯JAVA浓 做棵大树 4年前 (2020-07-13) 1672次浏览 0个评论

最近参与了一个老师的项目,项目后端选用了 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 &lt; 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 &lt; d.maildate AND

-- 其他条件省略

GROUP BY p.product_type

< 号可替换为,还有其余几种也可进行替换。> 虽然是合法可用的,但也是推荐使用实体引用来替换的哦。

实体引用 原字符 含义
\> > greater than
\< < less than
\& & ampersand
\' ' apostrophe
\" " quotation mark

[Mybatis] xxxMapper.xml 报错 Tag name expected


做棵大树 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明[Mybatis] xxxMapper.xml 报错 Tag name expected
喜欢 (1)
[欢迎投币]
分享 (0)
关于作者:
一个整天无所事事的,有时候忽然热血的孩子
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址