MyBatis 在xml文件中处理大于号小于号的方法
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
第一種方法:用轉(zhuǎn)義字符(注:對(duì)大小寫敏感!?)
用了轉(zhuǎn)義字符把>和<替換掉,然后就沒有問題了。
SELECT * FROM test WHERE 1 = 1 AND start_date ?<= CURRENT_DATE AND end_date >= CURRENT_DATE
附:XML轉(zhuǎn)義字符 ?
| ? | 空格 | |   |
| < | 小于號(hào) | < | < |
| > | 大于號(hào) | > | > |
| & | 和號(hào) | & | & |
| " | 引號(hào) | " | " |
| ' | 撇號(hào)? | ' (IE不支持) | ' |
第二種方法:<![CDATA[ ]]>
| 因?yàn)檫@個(gè)是xml格式的,所以不允許出現(xiàn)類似“>”這樣的字符,但是都可以使用<![CDATA[ ]]>符號(hào)進(jìn)行說明,將此類符號(hào)不進(jìn)行解析 ,如下: <update id="reduceNumber">UPDATE seckillSET number = number-1WHERE seckill_id=#{seckillId}AND start_time <![CDATA[ <= ]]> #{killTime} AND end_time >= #{killTime}AND number > 0; </update> |
注意點(diǎn):有動(dòng)態(tài)語句(where,if)的情況,where,if 條件不能放在<![CDATA[ ]]>中,否則將導(dǎo)致無法識(shí)別動(dòng)態(tài)判斷部分,導(dǎo)致整個(gè)sql語句非法.應(yīng)該縮小范圍,只對(duì)有字符沖突部分進(jìn)行合法性調(diào)整
錯(cuò)誤的形式:以下where 放在<![CDATA[ ]]>中
<select?id="getAccountErrorCount"?resultType="int"?parameterType="map">??<![CDATA[?select?count(*)?from?t_acctreg_accounterror?<where>?<if?test="enddate?!=?null?and?enddate?!=?''">?createdate?<=?#{enddate}?</if>?<if?test="acctno?!=?null?and?acctno?!=?''">?AND?acctno?LIKE?'%'#{acctno}'%'?</if>?</where>?]]>?? </select>??正確的形式:
<select id="getAccountErrorCount" resultType="int" parameterType="map"> select count(*) from t_acctreg_accounterror <where> <if test="enddate != null and enddate != ''"> <![CDATA[createdate <= #{enddate}]]> </if> <if test="acctno != null and acctno != ''"> <![CDATA[AND acctno LIKE CONCAT('%',#{acctno},'%')]]> </if> </where> </select>補(bǔ)充說明:like的以上兩種寫法,都是可以的
LIKE '%'#{acctno}'%'
LIKE CONCAT('%',#{acctno},'%')
轉(zhuǎn)載于:https://my.oschina.net/360yg/blog/1592128
總結(jié)
以上是生活随笔為你收集整理的MyBatis 在xml文件中处理大于号小于号的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中加减乘除怎样写代码,【求助】怎
- 下一篇: 数据监测驱动下的信息流广告优化