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的精度问题。
相关推荐
小马爱打代码2 小时前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端
东东5163 小时前
xxx食堂移动预约点餐系统 (springboot+微信小程序)
spring boot·微信小程序·小程序·毕业设计·个人开发·毕设
csdn2015_3 小时前
springboot task
java·spring boot·后端
czlczl200209253 小时前
Spring Boot :如何高性能地在 Filter 中获取响应体(Response Body)
java·spring boot·后端
码界奇点4 小时前
基于Spring Boot和Vue3的无头内容管理系统设计与实现
java·spring boot·后端·vue·毕业设计·源代码管理
你才是臭弟弟5 小时前
SpringBoot 集成MinIo(根据上传文件.后缀自动归类)
java·spring boot·后端
what丶k6 小时前
SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势
java·数据库·spring boot·spring·spring cloud
RwTo6 小时前
【源码】- SpringBoot启动
java·spring boot·spring
Elieal6 小时前
JWT 登录校验机制:5 大核心类打造 Spring Boot 接口安全屏障
spring boot·后端·安全
962464i6 小时前
mybatis-plus生成代码
java·开发语言·mybatis