mybatis修改int型數(shù)據(jù)無法修改成0的解決
mybatis修改int型數(shù)據(jù)無法修改成0
今天遇到一個很奇葩的問題,修改user實體里面的一個int型的狀態(tài)量1.2.3........都可以修改成功,唯獨(dú)參數(shù)為0時修改不成功,控制臺也沒有報錯,一切正常。項目用的是ssm框架。最后找到問題是出在mybatis的mapper.xml里了。
場景如下
修改status的值,0為禁用,1為啟用。當(dāng)傳入的值為0時,就會修改失敗。
過程如下
這是mybatis更新語句中的修改狀態(tài)量部分,查閱資料后得知問題出在status='' 這里,如果有這個條件則當(dāng)參數(shù)為0時判斷結(jié)果為false,則不會將0 set進(jìn)數(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通常設(shè)置為int型,根據(jù)不同的status設(shè)置不同的條件用于查詢或者編輯。Mybatis中經(jīng)常設(shè)置非空作為if的判斷條件,常見書寫為:
<if test="status!=null and status!='' "> status = #{status}, <if>
執(zhí)行查詢及編輯當(dāng)status=0時,查詢結(jié)果沒有查出status=0的用戶信息,編輯用戶的狀態(tài)也沒有修改成功,但是后臺顯示傳值正確(后臺打印信息如下所示)。
修改用戶信息
{id=22, username=wangzichun, password=******, email=, telephone=45643, roleId=2, status=0}
問題原因
當(dāng)status值為0時,Mybatis將作為if條件中的false結(jié)果,即不執(zhí)行此if里面的內(nèi)容,所以當(dāng)status=0時,if條件中的設(shè)置的過濾或者修改字段及字段取值沒有設(shè)置成功,導(dǎo)致查詢和編輯status=0時不成功。
解決方法
將status的if條件設(shè)置為<if test="status = -1">或者只寫<if test="status !=null">
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis新增save結(jié)束后自動返回主鍵id詳解
這篇文章主要介紹了mybatis新增save結(jié)束后自動返回主鍵id詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12springboot實現(xiàn)公眾號接收回復(fù)消息和超過5秒被動回復(fù)消息
本文主要介紹了springboot實現(xiàn)公眾號接收回復(fù)消息和超過5秒被動回復(fù)消息,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05SpringBoot獲取配置文件內(nèi)容的幾種方式總結(jié)
大家都知道SpringBoot獲取配置文件的方法有很多,下面這篇文章主要給大家介紹了關(guān)于SpringBoot獲取配置文件內(nèi)容的幾種方式,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02springboot?html調(diào)用js無效400問題及解決
這篇文章主要介紹了springboot?html調(diào)用js無效400的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03