方案一:使用转义字符
转义字符:
转义字符是一种特殊的字符常量。转义字符以反斜线""开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。
不同的语言有不同的转义符。如HTML转义符、java 转义符、xml 转义符、 oracle 转义符、sql 转义符 、sqlserver 转义符、php 转义符、asp 转义符、vb转义符、 javascript 转义符等等,还有网址中的百分号。
例如:
HTML的< >&"©
分别是 < > & " © 的转义字符
XML只有5个转义符: < >& " '
,分别对应 < > & " ’
转义符使用场景:
例:
HTML中< > &等字符是有特殊含义的,其中 < > 用于链接签,&用于转义。
Mybatis中< > 等字符在xml解析中是会报错的。
特殊字符 | 转义字符 |
---|---|
< | < |
> | > |
& | & |
" | " |
’ | ' |
<= | <= |
>= | >= |
方案二:使用xml的![CDATA[ ]]语法
<![CDATA[ ]]>是xml语法,在<![CDATA[ ]]>内部的所有内容都会被解析器忽略,不进行转义。所以在xml中这是一种通用方案。特殊字符 | <![CDATA[ ]]> |
---|---|
< | <![CDATA[<]]> |
> | <![CDATA[>]]> |
& | <![CDATA[&]]> |
" | <![CDATA["]]> |
’ | <![CDATA[']]> |
<= | <![CDATA[<=]]> |
>= | <![CDATA[>=]]> |
!= | <![CDATA[!=]]> |
特殊情况:
不能直接把mybatis中的逻辑判断全部包住,因为还有标签有使用特殊字符<>,所以尽可能缩小范围,写在条件中:
<if test="startTime != null">
AND <![CDATA[ time >= #{startTime}]]>
</if>