Mybatis Map接收数据tinyint(1)类型错误

简介: 简要讲述Mybatis使用Map接收返回数据时,tinyint(1)类型数据返回类型错误

问题描述

Mybatis开发过程中,使用Map接收返回数据时发现tinyint(1)类型字段自动转换成了Boolean类型,导致查询的数据出现问题

数据库字段

数据库表中字段为类型为tinyint(1)

`online_status` tinyint(1) DEFAULT '1' COMMENT '上线状态:1上线 0下线'

image.png

Mybatis查询语句

Mybatis查询语句通过Map接收返回数据

image.png

业务逻辑查询方法

List<Map> answerList = essenceAnswerMapper.findByAnswerDateV2(startTime, endTime, Long.parseLong(id), subjectIdList);

下面我们debug一下Map返回数据中对应online_status字段的返回值

image.png

这里可以看到tinyint(1)类型的字段`online_status` 值已经被转成了Boolean,而我们想要的实际是数据库原始字段的 0 1 值。

问题处理

方案一

在数据库链接后面加上tinyInt1isBit=false,比如

jdbc:mysql://192.168.6.207:3306/ei_answer_syn?useUnicode=true&characterEncoding=utf8\
  &zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8tinyInt1isBit=false

再次启动程序测试

image.png

根据debug看到的结果,字段`online_status`的返回值已经是正确的了,关于数据库连接增加的tinyInt1isBit=false说明可以参考Mysql官方文档:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-type-conversions.html 文档中关于这一块有明确的说明

image.png

方案二

改写sql,将对应的tinyint(1)字段增加判断IFNULL(ea.online_status,1) 其中默认值主要参考表设计时的默认值,或者是不影响业务逻辑的默认值都可以,数据库中这个字段的默认值是1,所以我这里就默认为1,`online_status` tinyint(1) DEFAULT '1' COMMENT '上线状态:1上线 0下线'

image.png

同样解决了问题

方案三

更改数据库字段tinyint(1)为tinyint(>1),这样查询过程中通过Map接收返回数据时也不会自动转换成Boolean类型了

image.png

相关文章
|
10小时前
|
Java 数据库连接 mybatis
Mybatis Plus保存数据返回主键id
Mybatis Plus保存数据返回主键id
25 1
|
10小时前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
23 1
|
10小时前
Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
24 2
|
10小时前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
18 1
|
10小时前
|
SQL 前端开发 Java
通过使用Mybatis插件来实现数据的分页功能
通过使用Mybatis插件来实现数据的分页功能
|
10小时前
|
存储 XML Java
mybatis使用内部类处理一对多类型数据2
mybatis使用内部类处理一对多类型数据2
13 0
|
10小时前
|
Java 数据库连接 mybatis
mybatis plus字段为null或空字符串把原来的数据也更新了,只需要注解
mybatis plus字段为null或空字符串把原来的数据也更新了,只需要注解
24 0
|
10小时前
|
Java 数据库连接 mybatis
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
20 1
|
10小时前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
17 1
|
10小时前
Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)
Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)
14 1