MyBatis xml特殊字符处理

Rocky大约 2 分钟

MyBatis xml特殊字符处理

5中特殊字符


>     大于
<     小于
&     &
"     双引号
'     单引号

当sql中有上面的字符的时候,需要特殊处理一下。

使用 <![CDATA[ ]]> 包起来。比如 

<![CDATA[  >=   ]]>

<![CDATA[  <=  ]]>

使用转义序列替代

特殊字符     转义序列
<           &lt;
>           &gt;
&           &amp;
"           &quot;
'           &apos;

其他

我还遇到另外一种情况,就是xml中有个sql 大致是这样的:

select * from xxx where a::jsonb ?| array['a', 'b', 'c']

-- 场景是pgsql.  
-- 这个sql是想查询 a这里中,包含了 a 或 b  或 c 3个元素任意一个的那些数据,其中a列存储的事json数组,类似       ["xxxx1","xxxx2","xxx3"]
-- sql中的 ?| 是一个操作符,而非参数

这种情况,即使使用 <![CDATA[ ]]>?| 包起来,mybatis仍然会解析为一个参数,导致执行异常。

解决办法就是在xml中 写成 ??| ,如下:

<select id="xxxx" resultType="com.xxxxx">
        select * from xxxx where 
            <![CDATA[ a  ??|  ]]>
            <foreach item="item" index="index" collection="list" open="array[" separator="," close="]">
                #{item}
            </foreach>
</select>

系统推荐









  • 随机毒鸡汤:敌人造成的困难很容易忍受,朋友取得的成功,却让人很难忍受。