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的精度问题。
相关推荐
t***p9354 小时前
idea创建SpringBoot自动创建Lombok无效果(解决)
spring boot·后端·intellij-idea
d***81724 小时前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
自不量力的A同学6 小时前
Spring Boot 4.0.0 正式发布
java·spring boot·后端
q***98528 小时前
什么是Spring Boot 应用开发?
java·spring boot·后端
豆奶特浓69 小时前
Java面试模拟:当搞笑程序员谢飞机遇到电商秒杀与AIGC客服场景
java·spring boot·微服务·面试·aigc·高并发·电商
踏浪无痕11 小时前
PageHelper 防坑指南:从兜底方案到根治方案
spring boot·后端
通往曙光的路上12 小时前
焚决糟糕篇
java·spring boot·tomcat
6***v41712 小时前
spring boot 项目打印sql日志和结果,使用logback或配置文件
spring boot·sql·logback
3***g20512 小时前
如何使用Spring Boot框架整合Redis:超详细案例教程
spring boot·redis·后端
2501_9418008812 小时前
Java高性能搜索引擎与Lucene实战分享:大规模文本索引、检索与优化经验
mybatis