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的精度问题。
相关推荐
逍遥德3 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
点燃大海3 小时前
SpringAI构建智能体
java·spring boot·spring·springai智能体
xier_ran3 小时前
【infra之路】02_RadixAttention与KV_Cache管理
java·spring boot·spring
码客日记3 小时前
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)
java·spring boot·git
杨运交4 小时前
[030][Web模块]Spring Boot 验证与 OpenAPI 集成实战:从校验规则到文档生成
前端·spring boot·python
再写一行代码就下班5 小时前
Cursor配置Java环境、创建Spring Boot项目的步骤
java·开发语言·spring boot
摇滚侠6 小时前
JavaSE 和 JavaEE 是什么意思
java·java-ee
我是唐青枫7 小时前
Java MyBatis 实战指南:XML 映射、动态 SQL 与数据访问层设计
java·mybatis
我登哥MVP8 小时前
Spring Boot 从“会用”到“精通”:SpringBoot MVC 请求处理全流程
java·spring boot·后端·spring·mvc·maven·intellij-idea
我登哥MVP8 小时前
Spring Boot 从“会用”到“精通”:ReturnValueHandler原理
java·spring boot·后端·spring·java-ee·maven·intellij-idea