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

溫馨提示×

溫馨提示×

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

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

在Mybatis使用Integer與''進行比較的坑如何解決

發布時間:2023-03-31 14:44:38 來源:億速云 閱讀:128 作者:iii 欄目:開發技術

這篇文章主要介紹“在Mybatis使用Integer與''進行比較的坑如何解決”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“在Mybatis使用Integer與''進行比較的坑如何解決”文章能幫助大家解決問題。

    使用Integer與''進行比較的坑

    前段時間遇到一個bug,就是修改某一個integer類型的值的時候,除了修改為0 其他的值都可以進行修改。只要想把這個字段改成0 就似乎沒有走update這個字段的語句。(前段時間比較忙也就沒有記下這個筆記)

    相信很多朋友在使用Mybatis的時候都會去使用通用一點的insert或者update語句,類似加入以下這種判斷來進行復用。

    <if test="orgName != null and orgName != ''">
        orgName =#{orgName ,jdbcType=VARCHAR},
    </if>

    也就是只有orgName有有效值的時候才會進入set語句,但是在對于Integer類型下的判斷就會有一定的影響。

    經過我的測試發現mybatis會將Integer值的0等于空字符串''

    例如傳入的num的值為0,if標簽里面一樣寫

    num != null and num != ''

    當num的值為0 ,mybatis會當做0等于空串,也就不會進入此if里面的代碼塊。

    比如update語句,如果傳進來的值為0那么這個字段就不會被update掉。

    也就是說在對Integer類型的值進行判斷的時候,只需要加入!= null 即可。

    Integer類型參數在Mybatis中的比較問題

    案例

    當使用mybatis傳入參數為Integer類型,使用條件構造語句時偶爾會導致判斷錯誤。如下

    select * from tbl_user where 1=1
    <if test="flag != null and flag != '' ">
        and flag = #{flag}
    </if>

    當flag傳入參數為0,會導致條件構造失敗;SQL執行結果不是我們想要的

    原因分析

    mybatis在預編譯sql時,使用OGNL表達式來解析if標簽,對于Integer類型屬性,在判斷不等于''時,會返回''的長度,也就是0

    源碼:

    (s.length() == 0) ? 0.0 : Double.parseDouble( s )

    因此表達式 flag != ''被當做 flag != 0 來判斷,所以當flag為0時,if條件判斷不通過

    關于“在Mybatis使用Integer與''進行比較的坑如何解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

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

    AI

    阿合奇县| 景宁| 常德市| 凤山市| 武安市| 高阳县| 乌审旗| 依安县| 南昌市| 福海县| 平度市| 峨边| 平阴县| 黄大仙区| 曲麻莱县| 庆云县| 龙胜| 晋城| 内乡县| 万山特区| 辉南县| 射阳县| 奉新县| 高雄县| 临城县| 铜山县| 九台市| 滨海县| 关岭| 浦北县| 绍兴市| 通渭县| 井研县| 永新县| 曲麻莱县| 射洪县| 瓦房店市| 博湖县| 涟水县| 元阳县| 奈曼旗|