首頁 > 軟體

mybatis中如何用tinyint儲存Boolean型別

2022-09-24 14:01:48

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型別。這也是比較奇怪的現象。例:

create table xs
(
   id int primary key,
   bl boolean
)

這樣是可以建立成功,但檢視一下建表後的語句,就會發現,mysql把它替換成tinyint(1)。也就是說mysql把boolean=tinyInt了。

二、我們的實體類

可以根據自己的習慣直接設定成boolean也可以使用int,資料庫儲存時會自動將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">是否是物聯網表</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更新時如果資料型別為boolean型遇到的問題

系統框架使用SSM當更新的資料型別為boolean時使用if標籤判斷不能判斷時段是否為空,只判斷欄位是否等於null

<if test="flag != null">
   flag = #{flag,jdbcType=TINYINT},
</if>

否則當欄位為false時,不能更新。

因為在mybatis底層當傳入進來的欄位沒有預設值的時候是空也就是false,你傳入進來的欄位值為false,在xml中的if判斷就會轉換為‘’,導致修改不成功這個欄位的值。

所以在修改boolean型別欄位的時候只需要判斷是否為null就行了

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com