MySQL的CASE WHEN:常用写法、几个容易绕进去的细节
聊聊CASE WHEN的两种语法、典型场景,以及类型、NULL、性能上那些线上跑起来才会注意到的问题。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-07-01 07:15:37 MyBatis XML SQL技巧
写 MyBatis 的 XML 映射文件时,SQL 里一旦出现大于号、小于号,直接写就会把 XML 解析器搞懵。它看到 < 就以为是标签开始,SQL 条件里那个 age < 18 直接被当成非法 XML,启动时直接报错。
其实处理起来就两类办法,用熟了很容易,但一开始确实会绕一下。
一种是用转义字符。XML 里把大于号写成 >,小于号写成 <。比如查年龄在某个区间的用户,写法大概是这样:
这里有一个比较容易踩的坑。如果条件是大于等于,必须写成 >=,不能写成 > =,中间别随手加空格,否则到 SQL 里就变了味。
多个符号组合时,转义字符拼在一起写就好,不用把 > 和 = 分开。像 <=、>= 这种场景,一旦拆开,线上问题排查起来会很痛苦——明明看着差不多,但就是查不出数据。
另一种是 CDATA。
XML 解析器碰到 包裹的内容会原样保留,不会去解析里面的尖括号什么的。所以可以把整段带特殊符号的 SQL 扔进去,怎么写都行:
用 CDATA 最直接的好处是可读性高,SQL 什么样就怎么写,不用担心转义字符拼错。
如果一个条件里有好几个特殊符号,用转义字符看着眼花,这时候切到 CDATA 会省心很多。
动态 SQL 里也一样。比如 里面要用大于等于:
或者直接用 CDATA 包住那部分 SQL:
一个常见的错误是直接在 test 条件里写 >,比如 。这样写启动就报错,因为 > 没转义。正确的写法是 test="age > 18"。
除了大于小于,XML 里还有几个特殊字符也得转义:& 写成 &,双引号写成 ",单引号写成 '。这几个在 MyBatis SQL 里遇到的频率没那么高,但用到了却没转义,也会卡住一会儿。
至于选转义还是 CDATA,主要看场景。就一两个符号的,转义字符简单直接;条件复杂、一大段 SQL 里混着好几个大于小于的,用 CDATA 更清晰,后续维护也舒服。
实际开发中,很多人会两种混着用,代码能跑、团队看得懂就好。
聊聊CASE WHEN的两种语法、典型场景,以及类型、NULL、性能上那些线上跑起来才会注意到的问题。
写MyBatis动态SQL一不留神就XML解析报错,这篇总结一下实体转义和CDATA两种处理特殊符号的方式,以及什么场景用哪种更舒服。
记录一次线上ORDER BY拼接漏掉空格导致SQL语法错误的排查过程,以及对应的修复合规和SQL注入防护。
在MyBatis XML映射文件中,特殊符号如`<`、`>`、`&`等常常引发解析错误。本文将为你深入剖析两种核心转义方案:XML实体转义符与CDATA区块。我们将详细阐述它们的适用场景、优缺点,并提供实战建议,帮助你根据SQL复杂度灵活选择,确保XML文件正确解析,告别繁琐的转义工作,全面提升代码可维护性与团队开发效率。
当MyBatis多表关联查询返回的数据总是“缺斤少两”,甚至一对多只剩一条记录时,你是否感到束手无策?本文将化身技术侦探,深入剖析字段冲突、ResultMap配置陷阱及SQL逻辑漏洞,手把手教你运用别名、id标签和逐步验证法,彻底解决结果集缺失问题,确保数据完整无误。