MyBatis中如何将tinyint字段映射为Boolean类型存储?

2026-05-24 04:092阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计765个文字,预计阅读时间需要4分钟。

MyBatis中如何将tinyint字段映射为Boolean类型存储?

目录 + MyBatis使用tinyint保存Boolean类型 + 一、boolean类型 + 二、我们的实体类 + 三、页面select标签 + MyBatis更新时,如数据类型为boolean型遇到的問題 + MyBatis使用tinyint保存Boolean类型 + 一、boolean类型 + 二、数据库中的表示方法

目录
  • mybatis用tinyint保存Boolean类型
    • 一、boolean类型
    • 二、我们的实体类
    • 三、页面select标签
  • mybatis更新时如果数据类型为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就行了

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

    MyBatis中如何将tinyint字段映射为Boolean类型存储?

    本文共计765个文字,预计阅读时间需要4分钟。

    MyBatis中如何将tinyint字段映射为Boolean类型存储?

    目录 + MyBatis使用tinyint保存Boolean类型 + 一、boolean类型 + 二、我们的实体类 + 三、页面select标签 + MyBatis更新时,如数据类型为boolean型遇到的問題 + MyBatis使用tinyint保存Boolean类型 + 一、boolean类型 + 二、数据库中的表示方法

    目录
    • mybatis用tinyint保存Boolean类型
      • 一、boolean类型
      • 二、我们的实体类
      • 三、页面select标签
    • mybatis更新时如果数据类型为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就行了

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

      MyBatis中如何将tinyint字段映射为Boolean类型存储?