首页 > 数据库 >Mysql tinyint长度为1时在java中被转化成boolean型(踩坑)

Mysql tinyint长度为1时在java中被转化成boolean型(踩坑)

时间:2023-04-10 18:02:19浏览次数:61  
标签:类型转换 实体类 sbyte tinyint boolean java

资料参考链接1: https://www.cnblogs.com/joeylee/p/3878223.html

资料参考链接2: https://blog.csdn.net/HD243608836/article/details/118197811

目录

背景

踩过两次tinyint的坑img

线上事故

1 污染数据

问题背景

tinyint(1)在java中被转化成boolean型(使用mybatis代码生成器),更新时又通过updateById更新,导致非零的状态全部更新为1

mysql

`order_status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '0-未支付 1-支付中 2-支付成功 3-退款中 4-已退款',

实体类

private Boolean orderStatus;

ps: 实习期,团队初创

2 类型转换异常

mysql

`subscribe` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否关注'

java代码

实体类字段: private Integer subscribe;

代码如图

image-20230410174305631

ps: 测试环境没有问题,生产环境出现了类型转换异常

原因

Mysql官方参考文档关于布尔类型的说明:

BOOL, BOOLEAN

These types are synonyms(同义词) for TINYINT(1). A value of zero is considered(认为是) false. Nonzero(不为0) values are considered true

解决方法 .

Tinyint(1) 就只用来保存 bool 值 只有0和1 不要保存其他的值, 对应的java的实体类用boolean接受

如果要保存多的值,就用 Tinyint(4) 这样的,那么到了Ef中这个 类型会变成 sbyte ,这个就是一个整形 .java用Integer接受

备注:sbyte:存储8位带符号整数。sbyte中的s代表带符号(signed),意味着变量可为正值或负值。sbyte变量的最小可能值为-128,最大可能值为127。

标签:类型转换,实体类,sbyte,tinyint,boolean,java
From: https://www.cnblogs.com/lyn8100/p/17303767.html

相关文章

  • Java 向 Word 模板插入数据(精要)
    PageOffice是一款实用的在线文档编辑工具,它让开发者能够轻松地向Word文档的特定部分动态地插入数据。在PageOffice中,这类特定部分主要涉及两个关键概念:数据区域(DataRegion)和数据标签(DataTag)。1.基本理念数据区域:数据区域实际上是一种特殊的Word书签对象,它位于Word文档......
  • Java入门5(多态)
    多态编译时的多态:方法重载运行时的多态:动态绑定多态的三大前提类之间要有继承关系要出现方法重写父类的引用指向了子类的对象测试样例//定义Person类publicclassPerson{publicStringname;publicStringsex;publicintage;publicPerson(St......
  • Java代理之jdk动态代理+应用场景实战
    本文将先介绍jdk动态代理的基本用法,并对其原理和注意事项予以说明。之后将以两个最常见的应用场景为例,进行代码实操。这两个应用场景分别是拦截器和声明性接口,它们在许多开发框架中广泛使用。比如在spring和mybatis中均使用了拦截器模式,在mybatis中还利用动态代理来实现声明性接口......
  • java将集合里面的元素拼接为一条String字符串
    java将集合里面的元素拼接为一条String字符串1️⃣随便创建一个list集合,往里面塞入元素  2️⃣第一种方式:通过foreach循环实现  但是通过这种方式只能将list集合里面的元素取出来变成一天string类型的字符串,不能根据自己的想法拼接  2️⃣第二种方式【推荐】:通过st......
  • javaEE进阶小结与回顾(四)
    不可变集合概念不可变集合,就是不可被修改的集合集合的数据项在创建的时候提供,并且在整个生命周期中都不可改变,否则报错特点定义完成后不可以修改,或添加删除不需要考虑变化,节省时间和空间,比他们的可变形式有更好的内存利用率当集合被不可信的库调用时,不可变形式是......
  • Java高并发专题之31、等待线程完成的方式你知道几种?
    在一个线程中需要获取其他线程的执行结果,能想到几种方式?各有什么优缺点?结合这个需求,我们使用6种方式,来对之前学过的知识点做一个回顾,加深记忆。方式1:Thread的join()方法实现代码:packagecom.itsoku.chat31;importjava.sql.Time;importjava.util.concurrent.*;/***跟......
  • JavaScript怎么实现web端上传超大文件
    ​ PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间,超过这个时间就会报错3.memory_limit=50M 设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此......
  • Java中interface接口使用方法详解
    前言在我们之前的文章里有说过,Java的类是单继承的,也就是说,一个类只能有一个“亲爹”。但是Java的类到底能不能实现多继承呢?间接实现多继承行不行?其实这是可以的!我们可以利用Java里的interface接口,来让Java的类间接地实现多继承,相当于是给一个类安排了“干爹”,而且还可以有多个“干......
  • JavaSE04流程控制语句
    第一章流程控制语句在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。1.1流程控制语句分类​ 顺序结构​ 判断和选择结构(if,switch)​ 循环结构(f......
  • Java最准确的获取当前一周开始时间和结束时间(格林威治时间)
    获取星期日作为一周的第一天的起始时间和结束时间publicstaticlong[]getCurrentWeekTimeFrame(){Calendarcalendar=Calendar.getInstance();calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));//startoftheweekcalendar.add(Calendar.DAY_OF_WEEK,-(c......