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 < #{param1} and col > #{param2}
XML转义字符对应的表:
字符 | 符号 | 解释 |
---|---|---|
< | < | 小于号 |
< | <= | 小于等于号 |
> | >= | 大于等于号 |
> | > | 大于号 |
& | & | 和 |
' | ’ | 单引号 |
" | " | 双引号 |
第三种:使用特殊符号表明小于号不被mybatis编译器解析 <![CDATA[ ]]>
select * from table where <![CDATA[ col < #{param1}]]> and <![CDATA[ col > #{param2}]]>
正文到此结束
- 本文标签: Spring Boot Java Spring
- 版权声明: 本站原创文章,于2020年12月20日由空白发布,转载请注明出处