当前位置: 首页 > news >正文

在 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 <!-- 通用方案 -->

相关文章:

  • 使用Node.js开发服务端接口
  • quartz 表达式最近10次执行时间接口编写
  • 【设计模式】3.装饰模式
  • leetcode332.重新安排行程:优先队列与DFS实现欧拉路径的行程规划
  • AIGC工具平台-SadTalker音频对口型数字人
  • Linux 内核中 TCP 协议栈的输出实现:tcp_output.c 文件解析
  • 2D曲线点云平滑去噪
  • (LeetCode 面试经典 150 题) 169. 多数元素(哈希表 || 二分查找)
  • python基础(while...else)
  • 手撕lru
  • MinIO入门教程:从零开始搭建方便快捷的分布式对象存储服务
  • 蓝桥杯备赛篇(上) - 参加蓝桥杯所需要的基础能力 1(C++)
  • 【Linux第四章】gcc、makefile、git、GDB
  • 用OBS Studio录制WAV音频,玩转语音克隆和文本转语音!
  • MySQL之InnoDB存储引擎深度解析
  • PowerShell读取CSV并遍历组数组
  • 3.8 恢复行为
  • 微处理器原理与应用篇---冯诺依曼体系结构
  • 一文详解归并分治算法
  • Python元组常用操作方法
  • 网络公司做网站的合同/网站内容seo
  • 如果做网站用java/泉州seo培训
  • wordpress站点统计代码/常见的网络营销方式有哪几种
  • 江西最近发生的新闻/网站优化推广费用
  • 陕西整站关键词自然排名优化/qq空间秒赞秒评网站推广
  • 基础集团网站建设/网站建设一条龙