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中寫(xiě)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)文章
SpringCloud集成Micrometer Tracing的代碼工程
Micrometer Tracing 是一個(gè)用于微服務(wù)架構(gòu)的追蹤庫(kù),它提供了一種簡(jiǎn)單而強(qiáng)大的方式來(lái)收集和報(bào)告分布式系統(tǒng)中的性能和調(diào)用鏈信息,Micrometer Tracing 旨在幫助開(kāi)發(fā)者和運(yùn)維人員理解微服務(wù)之間的交互,本文給大家介紹了如何在 Spring Cloud 集成 Micrometer Tracing2024-12-12
Java JSch遠(yuǎn)程執(zhí)行Shell命令的方法
本文主要介紹了Java JSch遠(yuǎn)程執(zhí)行Shell命令,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
快速解決idea @Autowired報(bào)紅線問(wèn)題
這篇文章主要介紹了快速解決idea @Autowired報(bào)紅線問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
解析springboot集成AOP實(shí)現(xiàn)日志輸出的方法
如果這需要在每一個(gè)controller層去寫(xiě)的話代碼過(guò)于重復(fù),于是就使用AOP定義切面 對(duì)其接口調(diào)用前后進(jìn)行攔截日志輸出。接下來(lái)通過(guò)本文給大家介紹springboot集成AOP實(shí)現(xiàn)日志輸出,需要的朋友可以參考下2021-11-11
springboot+Oauth2實(shí)現(xiàn)自定義AuthenticationManager和認(rèn)證path
本篇文章主要介紹了springboot+Oauth2實(shí)現(xiàn)自定義AuthenticationManager和認(rèn)證path,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
使用Java應(yīng)用程序添加或刪除 PDF 中的附件
當(dāng)我們?cè)谥谱鱌DF文件或者PPT演示文稿的時(shí)候,為了讓自己的文件更全面詳細(xì),就會(huì)在文件中添加附件,那么如何添加或刪除PDF中的附件呢,今天通過(guò)本文給大家詳細(xì)講解,需要的朋友參考下吧2023-01-01
特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實(shí)現(xiàn)單調(diào)棧示例
這篇文章主要為大家介紹了特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實(shí)現(xiàn)單調(diào)棧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09

