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类型。这也是比较奇怪的现象。例:
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就行了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
相关文章