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