在 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 <!-- 通用方案 -->
相关推荐
tsyjjOvO3 分钟前
JDBC(Java Database Connectivity)
java·数据库
qq_12498707537 分钟前
基于springboot的尿毒症健康管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·spring·毕业设计·计算机毕业设计
黎子越42 分钟前
python相关练习
java·前端·python
电商API&Tina1 小时前
电商数据采集 API 接口 全维度解析(技术 + 商业 + 合规)
java·大数据·开发语言·数据库·人工智能·json
liwulin05061 小时前
【JSON】使用com.fasterxml.jackson解析json字符串
java·数据库·json
what丶k1 小时前
深度解析:以Kafka为例,消息队列消费幂等性的实现方案与生产实践
java·数据结构·kafka
星火开发设计1 小时前
C++ 输入输出流:cin 与 cout 的基础用法
java·开发语言·c++·学习·算法·编程·知识
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
仟濹2 小时前
【Java加强】1 异常 | 打卡day1
java·开发语言·python
AllData公司负责人2 小时前
【亲测好用】实时开发平台能力演示
java·c语言·数据库