91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mybatis中的test語句失效怎么辦

發布時間:2022-03-14 09:16:10 來源:億速云 閱讀:232 作者:小新 欄目:開發技術

這篇文章主要介紹了mybatis中的test語句失效怎么辦,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

mybatis test語句失效

正常情況下,寫動態sql的if test或when test語句時,條件引用為雙引號括單引號

如下:

 <select id="sel1" resultType="User">
          select * from tb_user
          <where>
              <choose>
                  <when test="user != null and user != ''">
                      and user = #{user}
                  </when>
                  <when test="passwd != null and passwd != ''">
                      and passwd = #{passwd}
                 </when>
                 <otherwise>
                     and 1 = 1
                 </otherwise>
             </choose>
         </where>
 </select>

但是今天發現一個問題,當傳入的值為0或者1時,sql失效不被執行。

如下:

<when test="user == '1‘ ">
  and user = #{user}
</when>

之后,發現是MyBatis自身解析的問題,在標簽 中的內容,MyBatis是使用的OGNL表達式來進行解析的,這個地方需要注意下,單引號內有一個字符的情況下,OGNL會將其以 java 中的 char 類型進行解析,那么此時 char 類型與參數 String 類型用等號進行比較的時候結果都是false。

解決方案也很簡單

就是把test 中的單個字符用雙引號括起來。

<if test='param != "*"'>
    <choose>  
        <when test='param.indexOf("sub") != -1'>  
        
        </when>  
        <otherwise>   
            
        </otherwise>  
    </choose> 
</if>

mybatis test判斷注意事項

在使用mybatis進行判斷的時候,一定要注意傳入的數據類型與判斷的目標值類型是否一致。

最近在一次開發過程,

誤將一個傳入的整型數據使用了下面的判斷方式

<if test="appType != null and appType != ''">
    and a.c_appType = #{appType}
</if>

其中,appType是一個整型數據。可以看到,在test判斷里面使用了 appType != ''。

在進行業務功能測試的時候發現,當傳入的值是0時,該條件篩選沒有起作用,通過調試發現,mybatis會將空字符串轉換成double類型的0.0

如下圖所示:

mybatis中的test語句失效怎么辦

同樣整數數據也會轉換為double類型

如下圖所示:

mybatis中的test語句失效怎么辦

所以,mybatis在判斷的時候,數字0和空字符串是相等的,而我們的if判斷里,是兩者不相等時該條件才會起作用。

因此,在使用mybatis判斷的時候,一定要注意類型是否一致,數字類型就不要判斷空字符串的情況了。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“mybatis中的test語句失效怎么辦”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高台县| 万宁市| 万荣县| 衡阳市| 通许县| 永定县| 偏关县| 大洼县| 佛坪县| 浦北县| 陵川县| 皮山县| 金乡县| 淮滨县| 聂拉木县| 延津县| 称多县| 台州市| 元阳县| 太原市| 池州市| 衡南县| 宣威市| 文山县| 互助| 明溪县| 遂平县| 涪陵区| 泸州市| 九寨沟县| 茂名市| 吴川市| 昌图县| 邢台市| 曲麻莱县| 岐山县| 青州市| 松江区| 石屏县| 安徽省| 古蔺县|