在 MyBatis 的xml中,什么时候大于号和小于号可以不用转义

在 MyBatis 中,< 和 > ​在动态 SQL 标签内部​ 无需转义的功能是在以下版本引入的:

📌 关键版本说明

版本 支持情况 注意事项
​MyBatis 3.3.0+​​ ✅ 在 <if>、<where>、<set> 等动态 SQL 标签内部 可直接使用 < 和 > ​首次官方支持 ​(官方更新日志)
​MyBatis 3.2.8 及之前​ ❌ 所有位置都需要转义 需使用 &lt;、&gt; 或 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>

⚠️ 重要限制

  1. ​仅限动态 SQL 标签内 ​(如 <if>、<foreach>、<choose>、<where>、<set> 等)

    复制代码
    <!-- 错误示例:不在动态标签内仍需转义 -->
    SELECT * FROM products 
    WHERE price > 100 <!-- 这里会报XML解析错误! -->
  2. ​纯 SQL 块仍需处理 ​

    非动态部分的 SQL 仍需 CDATA 或转义:

    复制代码
    <select id="getProducts">
      <!-- 静态SQL部分需要CDATA -->
      <![CDATA[
        SELECT * FROM products WHERE price > 100
      ]]>
    </select>

🛠️ 兼容性建议

  1. ​检查 MyBatis 版本​

    复制代码
    <!-- pom.xml 示例 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.13</version> <!-- 推荐用新版 -->
    </dependency>
  2. ​当不确定时统一用 CDATA​

    复制代码
    <![CDATA[ age > #{value} ]]>
  3. ​动态 SQL 外的比较符号​ 始终用别名:

    复制代码
    WHERE price &gt; 100 <!-- 通用方案 -->
相关推荐
金銀銅鐵5 小时前
带您看懂字节码指令(二):空循环里有什么
java·后端·ai编程
吴名氏.6 小时前
Java转AI Agent教程(第十三周)混合检索与重排
java·数据库·人工智能·ai·ai agent
.痞老板.7 小时前
java ee--多线程(进阶)
java·java-ee
2603_969694857 小时前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
深入云栈9 小时前
Netty 4.2.x 源码深度解析 (二十三):ByteBuf 核心设计 —— 索引、类型与零拷贝
java·后端·架构
wang_shu_mo_ran10 小时前
MyBatis 从入门到进阶(一)
java·spring·mybatis
量化分析码农11 小时前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端
猫猫不是喵喵.11 小时前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
瑞雪兆丰年兮11 小时前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
曲径海盗12 小时前
Try-Except怎么用,3个追问解答在自动化下的应用
java·jvm·oracle