MyBatis中Bigint丢失精度问题

问题简述

  • 在MyBatis中,如果使用Map<String,Object>对象接收值为bigint类型的数据时,可能会遇到数据后几位变为0的情况。
    这使得当你的id为bigint时,前端接收到的id可能与数据库存储的id不一致。
  • 传统的解决方法是将entity设置为String类型即可。但这只局限于resultType为entity的情况。
    如果resultType为Map呢。

解决方法

  1. 在sql语句中额外查询一个id,并将其类型转化为CHAR(64)重命名为iid。
xml 复制代码
    <select id="test" resultType="java.util.Map">
        select CONVERT(id, CHAR(64)) AS iid, ${tableName}.* from ${tableName} where is_deleted = '0'
    </select>
  1. 在调用该Map方法后,在业务层重新将iid映射回id即可。
java 复制代码
List<Map<String, Object>> dbData= Tool.TransHump(perfTtTeacherInfoMapper.test(tableName));
listByPerfType.forEach(item -> {
            item.remove("id");
            item.put("id",item.get("iid"));
            item.remove("iid");
        }
);
  1. 这样id字段就会变为String类型,也就避免了BigInt的精度问题。
相关推荐
Jabes.yang24 分钟前
Java求职面试实战:从Spring Boot到微服务架构的技术探讨
java·数据库·spring boot·微服务·面试·消息队列·互联网大厂
小陈爱coding37 分钟前
SaaS多租户数据隔离实战:MyBatis拦截器实现行级安全方案
安全·云原生·mybatis·多租户
摇滚侠1 小时前
Spring Boot 3零基础教程,Demo小结,笔记04
java·spring boot·笔记
Lucky GGBond4 小时前
Vue + Spring Boot 实现 Excel 导出实例
vue.js·spring boot·excel
seven97_top4 小时前
Springboot 常见面试题汇总
java·spring boot·后端
lang201509286 小时前
MyBatis入门指南:从零掌握数据库操作
mybatis
222you7 小时前
Mybatis(1)
java·tomcat·mybatis
瑶山7 小时前
社区版Idea怎么创建Spring Boot项目?Selected Java version 17 is not supported. 问题解决
java·spring boot·intellij-idea·创建项目
学习编程的Kitty7 小时前
JavaEE初阶——多线程(1)初识线程与创建线程
java·开发语言·java-ee
陈小桔7 小时前
SpringBoot之配置文件
spring boot