mybatis中如何用tinyint保存Boolean類型
mybatis用tinyint保存Boolean類型
一、boolean類型
MYSQL保存BOOLEAN值時用1代表TRUE,0代表FALSE,boolean在MySQL里的類型為tinyint(1),
MySQL里有四個常量:true,false,TRUE,FALSE,它們分別代表1,0,1,0,
mysql> select true,false,TRUE,FALSE; +------+-------+------+-------+ | TRUE | FALSE | TRUE | FALSE | +------+-------+------+-------+ | ? ?1 | ? ? 0 | ? ?1 | ? ? 0 | +------+-------+------+-------+
可以如下插入boolean值:insert into [xxxx(xx)] values(true),當然也可以values(1);
MySQL沒有boolean類型。這也是比較奇怪的現(xiàn)象。例:
create table xs ( ? ?id int primary key, ? ?bl boolean )
這樣是可以創(chuàng)建成功,但查看一下建表后的語句,就會發(fā)現(xiàn),mysql把它替換成tinyint(1)。也就是說mysql把boolean=tinyInt了。
二、我們的實體類
可以根據(jù)自己的習慣直接設置成boolean也可以使用int,數(shù)據(jù)庫保存時會自動將true、false轉換成1/0。
mybatis中用tinyint保存Boolean類型的時候,直接使用false和true就可以,mybatis會自動映射。
private Boolean comment ;
但是要注意的是,一般的mapper.xml中寫where的時候會判斷
<if test="comment !=null and comment !=''"> ? ? ? comment=#{comment}, ? </if> ?
但是這里要判斷的時候就要去掉后邊的不等于空字符串了,應該使用如下的判斷
<if test="comment !=null"> ? ? ? comment=#{comment}, ? </if> ?
這種判空情況很多,boolean、date類型,都不能使用!=''
三、頁面select標簽
使用值true、false時的展示選擇問題
<label class="col-sm-1 control-label padA01">是否是物聯(lián)網表</label> <div class="col-sm-3"> ? ? <select id="isNbMeter" class="form-control"> ? ? ? ? <option value=true selected>是</option> ? ? ? ? <option value=false>否</option> ? ? </select> </div>
選擇后,保存上傳,不需要什么處理,直接保存值為boolean類型,與實體類一致,mysql自動轉換成int型保存。
但是頁面展示時,此類型的賦值展示跟其他值不一樣:
$("#installDate").val(""); $("#inUseMeter").val=true; $("#inUseMeter").find("option[value=true]").attr("selected",true); $("#isNbMeter").val=true; $("#imei").val(""); $("#meterState").val(1);
存在問題:
當select值設為true后,在對他設為false不起作用,值還是true,沒有改變,不知什么原因?
$("#inUseMeter").val=false; $("#inUseMeter").find("option[value=false]").attr("selected",true);
第一次設為true后,在設為false不再起作用
mybatis更新時如果數(shù)據(jù)類型為boolean型遇到的問題
系統(tǒng)框架使用SSM當更新的數(shù)據(jù)類型為boolean時使用if標簽判斷不能判斷時段是否為空,只判斷字段是否等于null
<if test="flag != null"> ? ?flag = #{flag,jdbcType=TINYINT}, </if>
否則當字段為false時,不能更新。
因為在mybatis底層當傳入進來的字段沒有默認值的時候是空也就是false,你傳入進來的字段值為false,在xml中的if判斷就會轉換為‘’,導致修改不成功這個字段的值。
所以在修改boolean類型字段的時候只需要判斷是否為null就行了
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java?BigDecimal類的一般使用、BigDecimal轉double方式
這篇文章主要介紹了Java?BigDecimal類的一般使用、BigDecimal轉double方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot實現(xiàn)無限級評論回復的項目實踐
本文主要介紹了SpringBoot實現(xiàn)無限級評論回復的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03淺談String、StringBuffer和StringBuilder之間的區(qū)別
這篇文章主要介紹了淺談String、StringBuffer和StringBuilder之間的區(qū)別,通過字面量方式為字符串賦值時,此時的字符串存儲在方法區(qū)的字符串常量池中,需要的朋友可以參考下2023-10-10spring boot如何使用spring AOP實現(xiàn)攔截器
本篇文章主要介紹了spring boot如何使用spring AOP實現(xiàn)攔截器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04Java中replace、replaceAll和replaceFirst函數(shù)的用法小結
相信會java的同學估計都用過replace、replaceAll、replaceFirst這三個函數(shù),可是,我們真的懂他們嗎?下面通過這篇文章大家再來好好學習學習下這幾個函數(shù)。2016-09-09