Java 开发使用 MyBatis PostgreSQL 问题:使用了特殊字符而没有正确转义

xml 复制代码
<delete id="deleteBeforeDate">
    DELETE FROM record
    WHERE operate_time
    <
    #{date}
</delete>
  • 在 Spring Boot 项目中,使用 MyBatis PostgreSQL,上述 SQL 语句 XML 解析错误,出现如下错误信息

    Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)

    复制代码
      ...
问题原因
  1. 这个错误信息表示在 XML 中使用了特殊字符而没有正确转义

  2. 其中,小于号 < 在 XML 中属于特殊字符,需要转义

处理策略
  1. < 替换为 XML 转义字符 &lt;
xml 复制代码
<delete id="deleteBeforeDate">
    DELETE
    FROM record
    WHERE operate_time &lt; #{date}
</delete>
  1. 或者,使用 <![CDATA[]]> 来包裹包含特殊字符的内容,更清晰,更推荐使用
xml 复制代码
<delete id="deleteBeforeDate">
    <![CDATA[
    DELETE
    FROM record
    WHERE operate_time < #{date}
    ]]>
</delete>
相关推荐
Zixhy1 小时前
手撕Reactor模型实现同步高并发服务器及Muduo网络库深入解析
linux·服务器·网络·数据库·c++
zhanghaha13142 小时前
HTML系列教程:14_HTML 表单与输入框 <form>、<input> 零基础详解
java·前端·javascript
傻啦嘿哟7 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670798 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
yxlalm8 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风8 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
李少兄8 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
天衍四九-8 小时前
MySQL中如何定位慢查询?如果SQL语句执行很慢,如何分析和优化?
数据库·sql·mysql
尚久龙9 小时前
mysql-5.7.26-winx64的安装步骤
数据库·mysql
医疗信息化王工9 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel