在编写 SQL 语句时,尤其是在动态 SQL 或 MyBatis 等 XML 配置的 SQL 中,我们经常需要处理特殊符号(如 >
、<
、>=
、<=
)的转义问题。这是因为这些符号在 XML 中具有特殊含义,直接使用可能导致解析错误。以下是两种常见的解决方法:
方法一:使用转义符号
在 XML 中,我们可以使用转义字符来替代特殊符号,避免解析冲突。常用转义符如下:
-
小于号
<
:用<
表示 -
小于等于
<=
:用<=
表示 -
大于号
>
:用>
表示 -
大于等于
>=
:用>=
表示
示例 SQL(MyBatis 中):
sql
SELECT * FROM orders
WHERE create_at >= #{startTime} AND create_at <= #{endTime}
方法二:使用 <![CDATA[ ]]>
包裹
通过 <![CDATA[ ]]>
包裹 SQL 片段,可以告诉 XML 解析器忽略其中的特殊符号,直接作为纯文本处理。这种方式更直观,无需记忆转义符。
示例 SQL:
sql
SELECT * FROM orders
WHERE create_at <![CDATA[ >= ]]> #{startTime}
AND create_at <![CDATA[ <= ]]> #{endTime}
对比总结
方法 | 优点 | 缺点 |
---|---|---|
转义符号 | 简洁,适合短语句 | 需记忆转义符,可读性稍差 |
<![CDATA[]]> |
无需转义,直观易读 | 代码略显冗长 |
使用建议
-
简单条件推荐使用转义符号 (如
>=
)。 -
复杂 SQL 或包含多个特殊符号时,推荐用
<![CDATA[ ]]>
提升可读性。 -
注意在 MyBatis 中动态 SQL 标签(如
<if>
、<where>
)内混合使用时的格式规范。