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

MyBatis 使用报错:org.xml.sax.SAXParseException 元素内容必须由格式正确的字符数据或标记组成

文章目录

  • 前言
  • 问题分析
  • 解决方案
    • 方案一:使用 CDATA 区块,依然使用 “ > ” 或者 “ < ”
    • 方案二:使用转义字符
  • 个人简介

前言

  • 今天在使用 MyBatis 时出现报错: Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。
Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 57; columnNumber: 24; 元素内容必须由格式正确的字符数据或标记组成。at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:259)at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:125)at org.apache.ibatis.builder.xml.XMLMapperBuilder.<init>(XMLMapperBuilder.java:78)at com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:581)... 81 common frames omitted
Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441)at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1436)at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.startOfMarkup(XMLDocumentFragmentScannerImpl.java:2636)at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2734)at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:348)at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:257)... 84 common frames omittedDisconnected from the target VM, address: '127.0.0.1:54640', transport: 'socket'

问题分析

  • 根据报错提示大概率是 xml 文件 SQL 的问题,经过确认确实是 xml 文件 SQL 的问题,xml 文件 SQL 语句中不能直接使用大小写符号(>、<、>=、<=)等,可以使用下面两种方案解决。
  • 注:使用 @Select 同理

解决方案

方案一:使用 CDATA 区块,依然使用 “ > ” 或者 “ < ”

  • CDATA(Character Data)是一种在XML文档中表示文本数据的方式。CDATA区块中的文本数据不会被XML解析器解析,而是被视为纯文本。
<select id="getLoginLogByPage" resultType="com.mcp.entity.LoginLog">SELECT l.id, l.job_number, l.name, l.createDate, l.ip_addr, l.remarkFROM loginlog l<where><if test="jobNumber != null" ><![CDATA[ and l.job_number > #{jobNumber}]]></if></where>GROUP BY l.today_date, l.ip_address;</select>

方案二:使用转义字符

  • 虽然无法使用相关字符,但是我们可以使用其转义后的字符,具体对应如下:

在这里插入图片描述


<select id="getLoginLogByPage" resultType="com.mcp.entity.LoginLog">SELECT l.id, l.job_number, l.name, l.createDate, l.ip_addr, l.remarkFROM loginlog l<where><if test="jobNumber != null" >and l.job_number &gt; #{jobNumber}</if></where>GROUP BY l.today_date, l.ip_address;</select>

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

http://www.lryc.cn/news/284215.html

相关文章:

  • PDF.js - 免费开源的 JavaScript 读取、显示 PDF 文档的工具库,由 Mozilla 开发并且持续维护
  • UI开发布局-HarmonyOS应用UI开发布局
  • 大数据开发之Hadoop(完整版+练习)
  • Redis与DB数据一致性-个人总结
  • VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络
  • SG-9101CGA(汽车+125°C可编程晶体振荡器)
  • 第十五届蓝桥杯单片机组备赛——独立键盘矩阵键盘
  • HCIA—— 16每日一讲:HTTP和HTTPS、无状态和cookie、持久连接和管线化、(初稿丢了,这是新稿,请宽恕我)
  • 使用JavaScript实现一个复杂功能:日期范围选择器
  • [C#]winform部署openvino调用padleocr模型
  • 【docker-compose】【nginx】内网环境https配置
  • 大语言模型无代码构建知识图谱概述
  • 链表回文结构
  • MyBatis框架基础到进阶
  • 【答案】2023年国赛信息安全管理与评估正式赛答案-模块1任务一
  • 【REMB 】翻译:草案remb-03
  • 力扣(leetcode)第830题较大分组的位置(Python)
  • 【导航】繁星学习随想录
  • Oracle 隐式数据类型转换
  • 压缩编码之不同缩放参数对重建图像质量的影响的python实现——JPEG变换编码不同压缩率的模拟
  • 大数据导论(2)---大数据与云计算、物联网、人工智能
  • 有序矩阵中第 K 小的元素
  • Nginx详细介绍(并从技术层面深度剖析)
  • 单元测试基本概念
  • ECTouch 电商微信小程序 SQL注入漏洞复现(CVE-2023-39560)
  • MCM备赛笔记——熵权法
  • vscode设置terminal的最大行数
  • kafka hang 问题记录
  • Jmeter-BeanShell脚本中for循环里面使用random随机数函数,每次生成的都一样
  • 高级编程。JavaScript中有哪些类型转换机制?