当前位置: 首页 > article >正文

MyBatis xml 文件中 SQL 语句的小于号未转义导致报错

问题现象

在 MyBatis 的 xml 文件中添加了一个 SQL 语句

<select id="countXxx" resultType="int">
        select count(*) from t1 where count < 3
</select>

启动 Spring Boot 应用程序后报错:

Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 109; columnNumber: 104; 元素内容必须由格式正确的字符数据或标记组成。
	at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:263) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:127) ~[mybatis-3.5.6.jar:3.5.6]
	at org.apache.ibatis.builder.xml.XMLMapperBuilder.<init>(XMLMapperBuilder.java:81) ~[mybatis-3.5.6.jar:3.5.6]
	at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:592) ~[mybatis-plus-extension-3.4.2.jar:3.4.2]
	... 72 common frames omitted
Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) ~[na:1.8.0_162]
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) ~[na:1.8.0_162]
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) ~[na:1.8.0_162]
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) ~[na:1.8.0_162]

IntelliJ IDEA 也提示了:

问题原因

这个问题的原因不符合是 XML 文件的语法,因为小于号 < 和 XML 文件的标签符号是一样的,所以在 XML 文件中使用小于号时要使用转义符号 <

修改方法

<!-- 小于 -->
<select id="countXxx" resultType="int">
        select count(*) from t1 where count &lt; 3
</select>

<!-- 小于等于 -->
<select id="countXxx" resultType="int">
        select count(*) from t1 where count &lt;= 3
</select>

参考

  • https://www.w3schools.com/xml/xml_syntax.asp

http://www.kler.cn/a/389269.html

相关文章:

  • 2024/11/13 英语每日一段
  • Vue 3 介绍及应用
  • C++20 中最优雅的那个小特性 - Ranges
  • MySQL:CRUD
  • vxe-table 3.10+ 进阶高级用法(一),根据业务需求自定义实现筛选功能
  • Ubuntu20.4系统编译瑞芯微RK3568 SDK
  • 高通Quick板上安装编译Ros1 noetic,LeGO_LOAM,FAR_Planner和rslidar_sdk
  • C#里演示使用数学的三角函数
  • 【JavaEE】多线程(1)
  • ssm基于Vue的戏剧推广网站+vue
  • C++ IO流
  • 缺陷的根本原因,出现在代码中的原因可能有哪些?
  • 【架构-37】Spark和Flink
  • rust字符串
  • 如何通过CDN加速提升电商网站双十一购物节用户体验
  • AIGC小红书新赛道,两个平台同时发,操作简单
  • 在 Mac 和 Windows 系统中快速部署 OceanBase
  • 解线性方程组(二)
  • 机器学习—高级优化方法
  • 计划系统学习C#
  • Python __str__()方法
  • 十九、计算机视觉-轮廓检测
  • 聚焦医疗发展|暴雨信创方案亮相医疗卫生信息技术创新高峰大会
  • 物理验证Calibre LVS | SMIC Process过LVS时VNW和VPW要如何做处理?
  • etcd分布式键值存储系统
  • 阿里1688 阿里滑块 231滑块 x5sec分析