MyBatis 的 xml 配置中如果直接把包含大于/小于的 sql 写入,提示编译错误,如何解决此类问题?
解释
在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。
这时,针对此类字符需要进行转义,在 XML 中有 5 个预定义的实体引用:
转义 | 原始 | 描述 |
---|---|---|
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 省略号 |
" | " | 引号 |
除了结合上述提供的 5 个预定义,还可以用 CDATA 标签。
CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
它的语法如下:
<![CDATA[ xxx ]]>
其中 xxx 就是原始的不需要解释器解析的内容。
示例如下:
<!-- 获取屏蔽 id 列表 -->
<select id="findBlockIdsListByCursor" resultMap="baseResultMap">
SELECT
<include refid="baseColumnList"/>
FROM
<include refid="tableName"/>
WHERE `type` >= 1 AND `type` <![CDATA[ <= ]]> 7 AND status = 1
AND id > #{cursor}
ORDER BY id limit #{limit}
</select>