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

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

问题描述

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

数据库字段

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

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

Mybatis查询语句

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

业务逻辑查询方法

java 复制代码
List<Map> answerList = essenceAnswerMapper.findByAnswerDateV2(startTime, endTime, Long.parseLong(id), subjectIdList);

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

这里可以看到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

再次启动程序测试

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

方案二

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

同样解决了问题

方案三

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

到这里,关于Mybatis Map接收数据tinyint(1)类型错误问题就处理完了。

相关推荐
野犬寒鸦1 小时前
从零起步学习并发编程 || 第四章:synchronized底层源码级讲解及项目实战应用案例
java·服务器·开发语言·jvm·后端·学习·面试
!停1 小时前
数据结构二叉树——堆
java·数据结构·算法
virus59459 小时前
悟空CRM mybatis-3.5.3-mapper.dtd错误解决方案
java·开发语言·mybatis
没差c10 小时前
springboot集成flyway
java·spring boot·后端
时艰.10 小时前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
编程彩机11 小时前
互联网大厂Java面试:从Java SE到大数据场景的技术深度解析
java·大数据·spring boot·面试·spark·java se·互联网大厂
笨蛋不要掉眼泪11 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
-孤存-11 小时前
MyBatis数据库配置与SQL操作全解析
数据库·mybatis
Yvonne爱编码11 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python
像少年啦飞驰点、12 小时前
零基础入门 Spring Boot:从“Hello World”到可上线微服务的完整学习指南
java·spring boot·微服务·编程入门·后端开发