Mybatis特殊字符转义以及sql中带有问号(?)的处理方式

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转义序列

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

但是,使用#{}在执行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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaowangbadan0_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值