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時判斷結(jié)果為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通常設(shè)置為int型,根據(jù)不同的status設(shè)置不同的條件用于查詢或者編輯。Mybatis中經(jīng)常設(shè)置非空作為if的判斷條件,常見書寫為:
<if test="status!=null and status!='' ">
status = #{status},
<if>
執(zhí)行查詢及編輯當status=0時,查詢結(jié)果沒有查出status=0的用戶信息,編輯用戶的狀態(tài)也沒有修改成功,但是后臺顯示傳值正確(后臺打印信息如下所示)。
修改用戶信息
{id=22, username=wangzichun, password=******, email=, telephone=45643, roleId=2, status=0}
問題原因
當status值為0時,Mybatis將作為if條件中的false結(jié)果,即不執(zhí)行此if里面的內(nèi)容,所以當status=0時,if條件中的設(shè)置的過濾或者修改字段及字段取值沒有設(shè)置成功,導致查詢和編輯status=0時不成功。
解決方法
將status的if條件設(shè)置為<if test="status = -1">或者只寫<if test="status !=null">
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java BufferedWriter BufferedReader 源碼分析
本文是關(guān)于Java BufferedWriter ,BufferedReader 簡介、分析源碼 對Java IO 流深入了解,希望看到的同學對你有所幫助2016-07-07
Mybatis動態(tài)查詢字段及表名的實現(xiàn)
本文主要介紹了Mybatis動態(tài)查詢字段及表名的實現(xiàn),通過靈活運用Mybatis提供的動態(tài)SQL功能,我們可以構(gòu)建更加靈活、高效的查詢語句,具有一定的參考價值,感興趣的小伙伴們可以參考一下2024-01-01
springcloud中RabbitMQ死信隊列與延遲交換機實現(xiàn)方法
死信隊列是消息隊列中非常重要的概念,同時我們需要業(yè)務(wù)場景中都需要延遲發(fā)送的概念,比如12306中的30分鐘后未支付訂單取消,那么本期,我們就來講解死信隊列,以及如何通過延遲交換機來實現(xiàn)延遲發(fā)送的需求,感興趣的朋友一起看看吧2022-05-05
Springboot使用Junit測試沒有插入數(shù)據(jù)的原因
這篇文章主要介紹了Springboot使用Junit測試沒有插入數(shù)據(jù)的原因,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04

