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的精度问题。
相关推荐
BillKu1 小时前
Spring Boot Controller 使用 @RequestBody + @ModelAttribute 接收请求
java·spring boot·后端
杯莫停丶2 小时前
Spring Boot全局异常捕获指南
java·spring boot
许苑向上2 小时前
【BeanDefinitionRegistryPostProcessor 和 BeanFactoryPostProcessor 详细解答】
java·spring boot·启动流程
22:30Plane-Moon14 小时前
项目1总结其三(图片上传功能)
ide·spring boot·vue
向上的车轮15 小时前
Spring Boot生态中ORM对数据治理的支持有哪些?
spring boot·数据治理·orm
武昌库里写JAVA16 小时前
使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程
java·vue.js·spring boot·sql·学习
一只爱撸猫的程序猿17 小时前
创建一个关于智能博物馆导览案例
spring boot·aigc·ai编程
funfan051718 小时前
在IDEA中DEBUG调试时查看MyBatis-Plus动态生成的SQL语句
sql·intellij-idea·mybatis
java水泥工18 小时前
Java项目:基于SpringBoot和VUE的在线拍卖系统(源码+数据库+文档)
java·vue.js·spring boot
zooooooooy18 小时前
Electron实现自定义全量更新
spring boot·electron