在mybatis中处理大于号和小于号时,应使用xml实体引用或CDATA区块。推荐方法一是将>替换为>、<替换为<,如WHERE age > 18 AND score < 100;方法二是用<![CDATA[ ]]>包裹sql语句,使特殊字符不被解析,提高可读性。

在使用 MyBatis 编写 XML 映射文件时,如果在 SQL 语句中使用了大于号(>)或小于号(<),可能会导致 XML 解析错误。这是因为 XML 本身将 < 和 > 视为标签的开始和结束符号。因此,直接写 > 或 < 会被解析器误认为是语法错误。
使用 XML 实体引用转义特殊字符
最简单且推荐的方式是使用 XML 预定义的实体引用对特殊字符进行转义:
- < 替换为
- > 替换为 >
- & 替换为 &
- “ 替换为 “
- ‘ 替换为 ‘
例如,原 SQL 中有:
<![CDATA[SELECT * FROM user WHERE age > 18 AND score < 100]]>
应改为:
<select id="getUser" resultType="User"> SELECT * FROM user WHERE age > 18 AND score < 100 </select>
使用 CDATA 区块包裹 SQL 条件
另一种更直观的方法是使用 CDATA 区块,这样区块内的所有内容都会被解析器视为纯文本,无需转义。
示例:
<select id="getUser" resultType="User"> <![CDATA[ SELECT * FROM user WHERE age > 18 AND score < 100 ]]> </select>
这种方式适合包含多个比较操作符或复杂逻辑的 SQL,代码可读性更高。
注意事项与建议
虽然 CDATA 使用方便,但需注意以下几点:
- 不能嵌套 CDATA 块。
- 如果 SQL 中动态拼接字段(如使用
${}),仍需注意 SQL 注入风险。 - 尽量使用
#{}]占位符方式传参,更安全。
对于简单的条件判断,使用实体转义即可;若条件较多或涉及复杂表达式,推荐使用 CDATA 提高可维护性。
基本上就这些,合理选择转义方式能让 MyBatis 的 XML 映射文件既安全又清晰。


