springboot+mybatis处理一般的特殊字符有如下方式
1. <![CDATA[ ]]>
XML文件会在解析XML时将5种特殊字符进行转义,分别是&, <, >, “, ‘, 我们不希望语法被转义,就需要进行特别处理。
有两种解决方法:其一,使用**<![CDATA[ ]]>**标签来包含字符。其二,使用XML转义序列来表示这些字符。
<select id="selectAll" resultMap="user">
SELECT * FROM table WHERE 1=1
AND startTime<![CDATA[>=]]> #{startTime}
AND endTime<![CDATA[<= ]]> #{endTime}
</select>
2.使用XML转义序列
特殊字符 转义序列
< <
> >
& &
" "
' '
但是,使用#{}在执行sql之前进行预编译,将sql中的需要传入参数部分变为?
<select id="selectAll" resultMap="user">
SELECT * FROM table WHERE 1=1
AND startTime<![CDATA[>=]]> #{startTime}
AND endTime<![CDATA[<= ]]> #{endTime}
</select>
---> SELECT * FROM table WHERE 1=1 AND startTime >= ?
AND endTime <= ?
假如sql中本身带有?,预编译后sql中出现两个?,导致执行sql异常
<select id="selectAll" resultMap="user">
SELECT * FROM table WHERE 1=1
AND name ?| array #{name}
</select>
---> SELECT * FROM table WHERE 1=1 AND name ?| array ?
后面了解到解决sql中带有?的方法
使用?? 代替?,例:?| 改成 ??|
<select id="selectAll" resultMap="user">
SELECT * FROM table WHERE 1=1
AND name ??| array #{name}
</select>