原创

Mybatis——xml配置文件编译报错问题及使用小于号出错的三种解决方案(已解决)

1. 错误说明

mybatis的xml配置文件*Mapper xml,出现编译错误,报错内容如下:

The content of elements must consist of well-formed character data or markup

检查xml内容如下

select * from table where col < #{param1} and col > #{param2}

为什么呢?看了半天也没有提示,mybatis编译器是不会提示的,这就非常不便利,根本无法定位问题。

2. 错误原因分析

其实是我们书写格式有问题,where语句中的小于号跟xml中标签的'<'符号是一样的,而mybatis的编译器是直接当成标签符号的,是不认识小于号的。因此要记住:mybatis的mapper.xml中是没有小于号的。

那大于号不也一样跟mybatis的标签符号‘>‘冲突了吗? 为什么大于号就可以呢?

这里就要补充点编译原理的知识了,编译系统识别器对xml文件的字符流进行识别时候,标签的左括号'<'肯定是最先读的,而且后续必定有一个标签符号‘>‘与之匹配,而且在标签左右括号之间是不会有其他符号的,因此编译器是很容易区分标签右括号和 大于号。

3. 解决方案

第一种:用大于号取代小于号

sql语句可以写成如下形式

select * from table where #{param1} > col and col > #{param2}

第二种:用转义字符替代小于号

select * from table where col &lt; #{param1} and col &gt; #{param2}

XML转义字符对应的表:

字符符号解释
&lt;<小于号
&lt;<=小于等于号
&gt;>=大于等于号
&gt;>大于号
&amp;&
&apos;单引号
&quot;"双引号

第三种:使用特殊符号表明小于号不被mybatis编译器解析 <![CDATA[ ]]>

select * from table where  <![CDATA[ col < #{param1}]]> and <![CDATA[ col > #{param2}]]>

alt

正文到此结束
本文目录