在 MyBatis 的xml中,什么时候大于号和小于号可以不用转义
在 MyBatis 中,<
和 >
在动态 SQL 标签内部 无需转义的功能是在以下版本引入的:
📌 关键版本说明
版本 | 支持情况 | 注意事项 |
---|---|---|
MyBatis 3.3.0+ | ✅ 在 <if> 、<where> 、<set> 等动态 SQL 标签内部可直接使用 < 和 > | 首次官方支持(官方更新日志) |
MyBatis 3.2.8 及之前 | ❌ 所有位置都需要转义 | 需使用 < 、> 或 CDATA |
🌟 使用场景(仅限 MyBatis 3.3.0+)
<!-- 在动态SQL标签内部直接使用 -->
<select id="getUsers" resultType="User">SELECT * FROM users<where><if test="minAge != null">age > #{minAge} <!-- 直接使用 > --></if><if test="maxAge != null">AND age < #{maxAge} <!-- 直接使用 < --></if></where>
</select>
⚠️ 重要限制
-
仅限动态 SQL 标签内(如
<if>
、<foreach>
、<choose>
、<where>
、<set>
等)<!-- 错误示例:不在动态标签内仍需转义 --> SELECT * FROM products WHERE price > 100 <!-- 这里会报XML解析错误! -->
-
纯 SQL 块仍需处理
非动态部分的 SQL 仍需 CDATA 或转义:<select id="getProducts"><!-- 静态SQL部分需要CDATA --><![CDATA[SELECT * FROM products WHERE price > 100]]> </select>
🛠️ 兼容性建议
-
检查 MyBatis 版本
<!-- pom.xml 示例 --> <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version> <!-- 推荐用新版 --> </dependency>
-
当不确定时统一用 CDATA
<![CDATA[ age > #{value} ]]>
-
动态 SQL 外的比较符号 始终用别名:
WHERE price > 100 <!-- 通用方案 -->