MyBatis XML 里<![CDATA[ ]]>的使用 [复制链接]
发表于 2026-2-12 00:13:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本日我们来聊聊 MyBatis XML 文件里的  ,我依稀记得我第一次看到 ,心想,这是个啥啊?
起首我们要明确:  不是 MyBatis 的专属语法,而是 XML 的原生语法(全称 Character Data,字符数据)。
XML 剖析器 对某些特别字符(比如 、&、'、" 等)举行剖析的时间,大概会将这些特别字符 误判,比如 将 <strong> 的核心作用:将包裹的内容标记为 "纯文本",XML 剖析器会跳过对此中内容的语法剖析,直接 原样保存,从而制止特别字符与 XML 语法的辩论,包管 MyBatis 终极拿到的 SQL 是我们预期的样子。
我们除了可以使用 ,也可以使用 转义字符
常用的 转义字符对照

  • < → <
  • > → >
  • & → &
  • " → "
  • ' → &apos;
注意末了的 ; 须要留着。
错误写法
  1. <select id="getUserByAge" resultType="User">
  2. <select id="getUserByAge" resultType="User">
  3. <select id="getUserByAge" resultType="User">
  4.     SELECT * FROM user WHERE <![CDATA[ age < #{age} ]]>
  5. </select>age < #{age}
  6. </select>
  7. </select>
复制代码
使用 转义 写法
  1. <select id="getUserByAge" resultType="User">
  2. <select id="getUserByAge" resultType="User">
  3. <select id="getUserByAge" resultType="User">
  4.     SELECT * FROM user WHERE <![CDATA[ age < #{age} ]]>
  5. </select>age < #{age}
  6. </select>
  7. </select>
复制代码
使用 CDATA 写法
  1. <select id="getUserByAge" resultType="User">
  2.     SELECT * FROM user WHERE <![CDATA[ age < #{age} ]]>
  3. </select>
复制代码
是不是使用 CDATA 的可读性要高许多,以是保举使用 CDATA,尤其是复杂SQL。
我们看个不是很复杂的SQL。
复杂SQL 转义 写法
  1. <select id="getUserByAge" resultType="User">
  2.     SELECT * FROM user WHERE <![CDATA[ age < #{age} ]]>
  3. </select>(age < #{age} OR salary > #{salary})    AND (create_time gt;= #{startTime} OR update_time lt;= #{endTime})
复制代码
复杂SQL CDATA 写法
  1. <select id="getUserBySpec" resultType="User">
  2.     SELECT * FROM user
  3.     <![CDATA[
  4.         WHERE (age < #{age} OR salary > #{salary})
  5.         AND (create_time >= #{startTime} OR update_time <= #{endTime})
  6.     ]]>
  7. </select>
复制代码
MyBatis 高版本 对部门特别字符做了兼容,比如直接写 > 大概不报错了。这是 "宽松剖析",跨情况(比如差别 XML 剖析器、差别数据库驱动等)仍有大概出题目,保举始终用 CDATA 包管兼容性
是 MyBatis 中处置处罚 SQL 语句与 XML 语法辩论的安全屏蔽。对包罗 特别字符 的 SQL 片断举行最小范围的 CDATA 包裹,既包管了安全,又确保了 MyBatis 动态 SQL 功能的完备性。
手执烟火以营生,心怀诗意以谋爱。-- 烟沙九洲

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表