问题描述:

在开发过程中,项目的主键生成器是SnowFlake,其生成的long主键是28位,

但是js中Long的最大值:https://blog.csdn.net/sunmerZeal/article/details/80844843 是26位,

所以当18位的long主键往前台传时,就导致了精度缺失,再往后传id进行更新或删除操作时,id就匹配不到位。

解决过程:

解决思路1:

首先想的是将后台主键由long类型改为String类型,组里几位小伙伴讨论后,有经验的大牛给出建议说,mysql主键long的性能要优于String类型。

这篇文章里有比较详细的介绍https://blog.csdn.net/HeatDeath/article/details/79833462

同时Long改String 还设计表结构的修改,改动面比较大,所以最终放弃了这个方案。

解决思路2:

抽象出父类通用属性,将Long修改为Object类型,Bean修改如下:

然后在返回前台的controller里,返回的最后一步进行Long2String类型转换;当请求往后台走时,第一步也是String2Long的转换,如下:

    // 数据往前台传, 为解决前台long长度过长导致的精度缺失
public static List idsLong2String(List<? extends CommonDO> li){
if(li == null || li.size() == 0){
return li;
}
for (CommonDO bean : li ){
bean.setId(bean.getId().toString());
}
return li;
}
// 数据由前台往底层传, String转Long以匹配底层long类型主键
public static List idsString2Long(List<? extends CommonDO> li){
if(li == null || li.size() == 0){
return li;
}
for (CommonDO bean : li ){
bean.setId(TransformUtil.getLong(bean.getId()));
}
return li;
}

以上。

[Done]SnowFlake生成Long类型主键返回前台过长导致精度缺失的问题的更多相关文章

  1. mysql生成varchar类型主键排序

    用uuid生成20位的主键 SELECT LEFT(REPLACE(UUID(), '-', ''),20) FROM DUAL 另一种方法: 因为数据库中有字母 需要排序的时候去除字母,重新取最大值 ...

  2. mybatis保存时将数据库自动生成的主键返回

    场景 保存订单数据和订单详情数据时需要将订单的主键作为关联子段添加到明细表中,需要将保存订单时的主键返回给供保存明细表时使用 添加xml中新增数据时的配置 <insert id="in ...

  3. MyBatis主键返回

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能. 比如在表的关联关系中,将数据插入主 ...

  4. insert主键返回 selectKey使用

    有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了. 这时候,通过一些设置,mybatis可以将insert的数据的主键 ...

  5. Mybatis里Mapper映射sql文件里insert的主键返回selectKey使用

    有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了. 这时候,通过一些设置,mybatis可以将insert的数据的主键 ...

  6. mybatis由浅入深day01_4.7根据用户名称模糊查询用户信息_4.8添加用户((非)自增主键返回)

    4.7 根据用户名称模糊查询用户信息 4.7.1 映射文件 使用User.xml,添加根据用户名称模糊查询用户信息的sql语句. 4.7.2 程序代码 控制台: 4.8 添加用户 4.8.1 映射文件 ...

  7. mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置

    n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...

  8. mybatis入门--主键返回(九)

    自增主键返回 mysql自增主键,执行insert提交之前自动生成一个自增主键. 通过mysql函数获取到刚插入记录的自增主键: LAST_INSERT_ID() 是insert之后调用此函数. 修改 ...

  9. mybatis+oracle 完成插入数据库,并将主键返回的注意事项

    mybatis+oracle 完成插入数据库,并将主键返回的注意事项一条插入语句就踩了不少的坑,首先我的建表语句是: create table t_openapi_batch_info( BATCH_ ...

随机推荐

  1. ERP产品销售发货判断库存功能(四十二)

    产品数量的前端(键盘抬起的事件): <td> <input type="text" name="proCount" onkeyup=" ...

  2. ERP采购业务(三十七)

    产品构建表的添加存储过程: CREATE PROCEDURE [dbo].[BioPurchaseAppInfo_ADD] @PurchaseID INT OUTPUT, @Subject NVARC ...

  3. Tomcat下指定JDK

  4. JDK1.7+Tomcat6.0+MyEclipse8.6在win7下的安装与配置

    http://wenku.baidu.com/view/4f0bef02192e45361066f548.html

  5. python全栈开发day29-网络编程之socket常见方法,socketserver模块,ftp作业

    一.昨日内容回顾 1.arp协议含义 2.子网,子网掩码 3.两台电脑在网络中怎么通信的? 4.tcp和udp socket编码 5.tcp和udp协议的区别 6.tcp三次握手和四次挥手,syn洪攻 ...

  6. BZOJ1180 [CROATIAN2009]OTOCI LCT

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1180 本题和BZOJ2843一样. BZOJ2843 极地旅行社 LCT 题意概括 有n座岛 每座 ...

  7. Unity 之 rawimage 与image 的区别

    http://www.newbieol.com/information/740.html

  8. ARIMA模型---时间序列分析---温度预测

    (图片来自百度) 数据 分析数据第一步还是套路------画图 数据看上去比较平整,但是由于数据太对看不出具体情况,于是将只取前300个数据再此画图 这数据看上去很不错,感觉有隐藏周期的意思 代码 # ...

  9. java enum的一种写法记录

    public enum TestEnum { provider { @Override public void provide() { this.name = "hjzgg"; } ...

  10. u3d 地形 U3d terrain

    u3d 地形 U3d terrain 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com fbx ...