资讯动态

mybatis 文件里面的特殊符号处理

发布时间:2026/8/31 22:15:09 来源:尧图企业网站定制
在 MyBatis 的 XML 映射文件中特殊符号的处理是一个经典的“坑”主要分两种情况SQL 语句里的特殊字符和MyBatis 自身的占位符冲突。针对你问的“满杯的死面文件”我猜是“MyBatis 的 XML 文件”下面这四种场景的处理方案最常用1. 比较运算符、、最常踩的坑在 XML 里尖括号会被解析为标签直接写或会导致解析失败。✅ 推荐用![CDATA[ ]]包裹xmlselect idquery resultType... ![CDATA[ SELECT * FROM table WHERE age 18 AND status 0 AND create_time NOW() ]] /select✅ 也可以用实体符号代替写成lt;写成gt;写成lt;gt;或!2. LIKE 语句中的%和_这两个是 SQL 的通配符直接写在#{}里会被当作字面值但如果你写的是%${value}%会有 SQL 注入风险。✅ 正确做法在 Java 代码里拼好通配符用#{}传进去java// Java 代码 String keyword % text %;xml!-- XML 文件 -- select idsearch resultType... SELECT * FROM table WHERE name LIKE #{keyword} /select3. 与 MyBatis 占位符冲突${}和#{}的边界问题有时候你的 SQL 里需要用到${}这种字符串拼接但里面的内容本身就有}或者你想用${}传一个表名进来。✅ 比较稳妥的方式区分业务逻辑能不用${}就尽量不用如果要用参数必须在上游做白名单校验。4. 注释里的特殊符号XML 的注释!-- --里面不能有连续的两个短横线--否则会报错。xml!-- 错误写法里面有 -- SELECT 1 -- 这是一个注释 -- !-- 正确写法去掉 -- -- 一个“万能”解决方案用![CDATA[ ]]如果你懒得记这些规则直接在 XML 的 SQL 外层套一个![CDATA[ ]]标签里面的内容就不会被 XML 解析器干扰你可以随便写、、这些符号。记住#{}和${}放在 CDATA 里面是无效的会被当作普通字符串处理。所以要把占位符放在 CDATA 外面。xmlselect idsafeQuery resultType... ![CDATA[ SELECT * FROM table WHERE age 18 ]] AND name #{name} /select你是在写、时报错了还是在用LIKE模糊查询时遇到问题如果是前者直接套CDATA就行。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价