[Done]SnowFlake生成Long类型主键返回前台过长导致精度缺失的问题
问题描述:
在开发过程中,项目的主键生成器是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类型主键返回前台过长导致精度缺失的问题的更多相关文章
- mysql生成varchar类型主键排序
用uuid生成20位的主键 SELECT LEFT(REPLACE(UUID(), '-', ''),20) FROM DUAL 另一种方法: 因为数据库中有字母 需要排序的时候去除字母,重新取最大值 ...
- mybatis保存时将数据库自动生成的主键返回
场景 保存订单数据和订单详情数据时需要将订单的主键作为关联子段添加到明细表中,需要将保存订单时的主键返回给供保存明细表时使用 添加xml中新增数据时的配置 <insert id="in ...
- MyBatis主键返回
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能. 比如在表的关联关系中,将数据插入主 ...
- insert主键返回 selectKey使用
有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了. 这时候,通过一些设置,mybatis可以将insert的数据的主键 ...
- Mybatis里Mapper映射sql文件里insert的主键返回selectKey使用
有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了. 这时候,通过一些设置,mybatis可以将insert的数据的主键 ...
- mybatis由浅入深day01_4.7根据用户名称模糊查询用户信息_4.8添加用户((非)自增主键返回)
4.7 根据用户名称模糊查询用户信息 4.7.1 映射文件 使用User.xml,添加根据用户名称模糊查询用户信息的sql语句. 4.7.2 程序代码 控制台: 4.8 添加用户 4.8.1 映射文件 ...
- mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置
n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...
- mybatis入门--主键返回(九)
自增主键返回 mysql自增主键,执行insert提交之前自动生成一个自增主键. 通过mysql函数获取到刚插入记录的自增主键: LAST_INSERT_ID() 是insert之后调用此函数. 修改 ...
- mybatis+oracle 完成插入数据库,并将主键返回的注意事项
mybatis+oracle 完成插入数据库,并将主键返回的注意事项一条插入语句就踩了不少的坑,首先我的建表语句是: create table t_openapi_batch_info( BATCH_ ...
随机推荐
- LINQ学习之旅 (四)
LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains 1.Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. ...
- 你需要知道的 .NET
1. 简述private.protected.public.internal 修饰符的访问权限. 答. private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内 ...
- VEMap.DeleteAllShapeLayers 方法
来源:https://msdn.microsoft.com/zh-cn/library/bb412514.aspx <!DOCTYPE html PUBLIC "-//W3C//DTD ...
- vtiger7新模块的创建和配置
vtiger出7.0了,以前的那些配置方法已经不管用了 下面是新的 模块创建及一些页面及功能配置的方法 下面介绍三个点 1.新建一个模块 2.实现单图片上传的功能 3.实现页面summary显示的功能 ...
- C语言中的地址传递(传指针,传递给形参的指针仍然是实参指针的一份拷贝)
先看一个例子:这个程序为什么会崩溃? #include <stdio.h> #include <stdlib.h> int f(int *q) { ; q = (int*)ma ...
- 推荐一个spring cloud 学习路线,绝对合理化
最近没有时间所有没用给大家更新spring cloud 系列学习,在这先给大家奉献上我学习spring cloud 的路线 当然第一步先学习springboot然后: spring cloud eur ...
- JavaEE - 20181225
作者:沈世钧链接:https://www.zhihu.com/question/305924723/answer/557800752来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- loj#2128. 「HAOI2015」数字串拆分 矩阵乘法
目录 题目链接 题解 代码 题目链接 loj#2128. 「HAOI2015」数字串拆分 题解 \(f(s)\)对于\(f(i) = \sum_{j = i - m}^{i - 1}f(j)\) 这个 ...
- Codeforces.100633J.Ceizenpok's formula(扩展Lucas)
题目链接 ->扩展Lucas //求C_n^k%m #include <cstdio> typedef long long LL; LL FP(LL x,LL k,LL p) { L ...
- android TextView如何换行?
具体代码是: rb_zuotian.setText("第一行"+"\n"+"第二行"); rb_jintian.setText(DateUt ...