mybatis修改int型數(shù)據(jù)無法修改成0的解決
mybatis修改int型數(shù)據(jù)無法修改成0
今天遇到一個很奇葩的問題,修改user實體里面的一個int型的狀態(tài)量1.2.3........都可以修改成功,唯獨參數(shù)為0時修改不成功,控制臺也沒有報錯,一切正常。項目用的是ssm框架。最后找到問題是出在mybatis的mapper.xml里了。
場景如下
修改status的值,0為禁用,1為啟用。當傳入的值為0時,就會修改失敗。
過程如下
這是mybatis更新語句中的修改狀態(tài)量部分,查閱資料后得知問題出在status='' 這里,如果有這個條件則當參數(shù)為0時判斷結果為false,則不會將0 set進數(shù)據(jù)庫。(折騰了一晚上沒有成功配置log4j打印mybatis解析出的sql語句,這里無法展示sql語句)具體原因還得參考源碼才能找到答案,由于本人能力有限這里還是留給以后的自己和各位大牛查找吧。
解決方法
1.去掉status='' 即<if test="status != null">即可
2.改寫成 <if test="status != -1">
mybatis int類型值為0判空
問題現(xiàn)狀
項目開發(fā)時經(jīng)常遇到status值的判斷情況,status通常設置為int型,根據(jù)不同的status設置不同的條件用于查詢或者編輯。Mybatis中經(jīng)常設置非空作為if的判斷條件,常見書寫為:
<if test="status!=null and status!='' "> status = #{status}, <if>
執(zhí)行查詢及編輯當status=0時,查詢結果沒有查出status=0的用戶信息,編輯用戶的狀態(tài)也沒有修改成功,但是后臺顯示傳值正確(后臺打印信息如下所示)。
修改用戶信息
{id=22, username=wangzichun, password=******, email=, telephone=45643, roleId=2, status=0}
問題原因
當status值為0時,Mybatis將作為if條件中的false結果,即不執(zhí)行此if里面的內容,所以當status=0時,if條件中的設置的過濾或者修改字段及字段取值沒有設置成功,導致查詢和編輯status=0時不成功。
解決方法
將status的if條件設置為<if test="status = -1">或者只寫<if test="status !=null">
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
springboot實現(xiàn)公眾號接收回復消息和超過5秒被動回復消息
本文主要介紹了springboot實現(xiàn)公眾號接收回復消息和超過5秒被動回復消息,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05