亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

鄱阳县| 赣榆县| 云和县| 定州市| 鄂托克前旗| 化州市| 灵璧县| 图木舒克市| 伊吾县| 凤凰县| 环江| 建阳市| 泸水县| 将乐县| 东乌| 吴桥县| 林西县| 临颍县| 浦北县| 越西县| 赤水市| 石景山区| 库伦旗| 通化市| 明光市| 绥中县| 娄烦县| 甘泉县| 丹巴县| 镇原县| 白河县| 松溪县| 建平县| 沅陵县| 和田县| 云梦县| 昌江| 永春县| 沙田区| 荣昌县| 邮箱|