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的精度问题。
相关推荐
身如柳絮随风扬10 小时前
TiDB 极速入门与 Spring Boot 实战:从 Docker 部署到高并发调优
spring boot·docker·tidb
Don.TIk1 天前
ChapterOne-搭建项目骨架
java·spring·spring cloud·mybatis
南极企鹅1 天前
事务&@Transactional注解
java·数据库·spring·oracle·mybatis
happymaker06261 天前
SpringBoot学习日记——DAY02(SpringBoot整合Swagger3)
java·spring boot·学习
未若君雅裁1 天前
Spring Boot 自动配置原理与常用注解
java·spring boot·后端
Yeh2020581 天前
springboot+vue笔记
vue.js·spring boot·笔记
隐退山林1 天前
JavaEE进阶:MyBatis 操作数据库(入门)
数据库·java-ee·mybatis
YOU OU1 天前
SpringBoot 配置文件
java·spring boot·后端
逍遥德1 天前
SpringBoot自带TaskScheduler 接口使用详解:(02)微服务多实例模式下,爆发任务重复执行问题
spring boot·分布式·后端·微服务·中间件