mybatisplus使用雪花id通过swagger返回ID时精度丢失问题

在使用mybatisplus自带雪花的时候会发现返回的ID是19位的长度,因此在通过swagger页面展示的时候会发现后端返回的和页面展示的ID不一致问题。是因为精度丢失的问题。因此需要更改雪花ID的长度

在这里插入图片描述
在这里插入图片描述

跟踪进去:

在这里插入图片描述
发现是DefaultIdentifierGenerator类实现了IdentifierGenerator并重写了nextId方法,因此需要我们重写nextId方法

  • 进行重写:
package com.ssdl.config.automatic;import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.ssdl.util.IdGenerator;
import org.springframework.stereotype.Component;@Component
public class CustomerIdGenerator implements IdentifierGenerator {@Overridepublic Number nextId(Object entity) {return IdGenerator.generateId();}
}
package com.ssdl.util;import java.util.Date;
import java.util.UUID;/*** compressed id generator, result id not great than 53bits before 2318-06-04.*/
public class IdGenerator {private static IdGenerator instance = new IdGenerator(0);public static IdGenerator initDefaultInstance(int machineId) {instance = new IdGenerator(machineId);return instance;}public static IdGenerator getInstance() {return instance;}public static long generateId() {return instance.nextId();}// total bits=53(max 2^53-1:9007199254740992-1)// private final static long TIME_BIT = 40; // max: 2318-06-04private final static long MACHINE_BIT = 5; // max 31private final static long SEQUENCE_BIT = 8; // 256/10ms/*** mask/max value*/private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);private final static long MACHINE_LEFT = SEQUENCE_BIT;private final static long TIMESTMP_LEFT = MACHINE_BIT + SEQUENCE_BIT;private long machineId;private long sequence = 0L;private long lastStmp = -1L;private IdGenerator(long machineId) {if (machineId > MAX_MACHINE_NUM || machineId < 0) {throw new IllegalArgumentException("machineId can't be greater than " + MAX_MACHINE_NUM + " or less than 0");}this.machineId = machineId;}/*** generate new ID** @return*/public synchronized long nextId() {long currStmp = getTimestamp();if (currStmp < lastStmp) {throw new RuntimeException("Clock moved backwards.  Refusing to generate id");}if (currStmp == lastStmp) {sequence = (sequence + 1) & MAX_SEQUENCE;if (sequence == 0L) {currStmp = getNextTimestamp();}} else {sequence = 0L;}lastStmp = currStmp;return currStmp << TIMESTMP_LEFT //| machineId << MACHINE_LEFT //| sequence;}private long getNextTimestamp() {long mill = getTimestamp();while (mill <= lastStmp) {mill = getTimestamp();}return mill;}private long getTimestamp() {// per 10msreturn System.currentTimeMillis() / 10;// 10ms}public static Date parseIdTimestamp(long id) {return new Date((id >>> TIMESTMP_LEFT) * 10);}public static String uuid() {return UUID.randomUUID().toString().replaceAll("-", "");}
}

插曲:
在使用mybatisplus时自动插入创建时间之类的操作:

package com.ssdl.config.autoMatic;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.util.Date;@Component
public class MybatisHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {//属性名this.setFieldValByName("createTime", new Date(), metaObject);this.setFieldValByName("updateTime", new Date(), metaObject);this.setFieldValByName("isDel", 0, metaObject);this.setFieldValByName("createUser", "admin", metaObject);this.setFieldValByName("updateUser", "admin", metaObject);//this.setFieldValByName("createUser", SecureUtil.getUserId(), metaObject);//不维护create_user可以不使用这行代码}@Overridepublic void updateFill(MetaObject metaObject) {//属性名this.setFieldValByName("updateTime", new Date(), metaObject);this.setFieldValByName("updateUser", "admin", metaObject);//this.setFieldValByName("updateUser", SecureUtil.getUserId(), metaObject);}
}
	@TableId(value = "id",type = IdType.ASSIGN_ID)private Long id;/*** 进行新增或者更新操作时* Mybatis自动进行维护时间*/@TableField(fill= FieldFill.INSERT)private String createUser;@TableField(fill=FieldFill.INSERT)@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date createTime;@TableField(fill=FieldFill.INSERT_UPDATE)@JsonIgnoreprivate String updateUser;@TableField(fill= INSERT_UPDATE)@JsonIgnoreprivate Date updateTime;@TableLogic@TableField(fill= FieldFill.INSERT)@JsonIgnoreprivate Integer isDel;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/225123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯专题-真题版含答案-【扑克牌排列】【放麦子】【纵横放火柴游戏】【顺时针螺旋填入】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

【Redis】【MySQL】redis与mysql的慢查询

redis和mysql都存在对于慢查询的日志记录&#xff0c;下面将叙述一下两者的慢查询。 一&#xff0c;redis[1] redis的慢查询日志本质上是一个list对象&#xff0c;不过redis并没有提供慢查询日志的key。开发者可以通过下列命令查询慢查询日志&#xff1a; #获得慢查询日志&a…

Python Pandas 如何给DataFrame增加一行/多行 数据(第6讲)

Python Pandas 如何给DataFrame增加一行/多行 数据(第6讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

目标检测YOLO系列从入门到精通技术详解100篇-【图像处理】人脸识别

目录 前言 算法原理 网络压缩(network compression) 视觉问答(visual question answering)

读书笔记:《汽车构造与原理》

《透视汽车会跑的奥秘》《汽车为什么会跑&#xff1a;底盘图解》《汽车为什么会跑&#xff1a;图解汽车构造与原理》 一、心脏&#xff1a;发动机 活塞往复运动转化为曲轴的旋转运动 活塞&#xff1a;膝关节活塞连杆&#xff1a;小腿曲轴&#xff1a;自行车脚踏板 四冲程&…

GZ015 机器人系统集成应用技术样题2-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题2 选手须知&#xff1a; 本任务书共 25页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

QT-坦克大战游戏

QT-坦克大战游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "score.h" Score::Score(){health30; maxHealthhealth;QLabel *label1 new QLabel(this);label1->setFrameStyle(QFrame::Plain | QFrame::Box);label1->setStyle…

将 Github token 添加至远程仓库

将 Github token 添加至远程仓库后便于每次 push 重复输入的麻烦 首先,将已生成的 token 记录(注:生成后的 token 确认后便无法查看只能重新生成)并找到对应的项目 git 本地文件路径下 其次,将其与项目所关联,按如下格式配置即可 token 格式类似于 ghp_CAxxxxxxxxxxxxxxxxxGx5j…

常见ORM 框架

特点MyBatisHibernateJPA (Java Persistence API)SQL 控制支持开发者编写和管理自己的 SQL 语句对 SQL 抽象程度更高&#xff0c;Hibernate 提供 HQL对 SQL 抽象程度高&#xff0c;定义更抽象的查询条件映射方式XML 或注解方式映射 SQL 查询结果到 Java 对象基于注解或 XML 配置…

竞赛保研 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

Oracle日期加减

1.直接加减数字 SELECT SYSDATE "当前时间", SYSDATE 1 "加一天", SYSDATE (1 / 24) "加一小时", SYSDATE (1 / 24 / 60) "加一分钟", SYSDATE (1 / 24 / 60 / 60) "加一秒钟", SYS…

AI人工智能在建筑智能化工程设计的应用

AI人工智能在建筑智能化工程设计的应用 相关政策&#xff1a; 建筑智能化工程设计资质是为了合理设计各种智能化系统&#xff0c;让它们有机地结合成为有效的整体作用。在工程设计标准中&#xff0c;智能化资质设计全称为建筑智能化系统专项设计资质。企业一旦具备智能化设计资…

vue 使用 Echarts做地图及飞线效果

前言&#xff1a; 效果图 一. 项目中安装以及引入Echarts 1.1 npm 命令安装echarts库 npm install echarts --save 1.2 yarn命令安装echarts库 yarn add echarts 1.3 引用 a. 在使用页面上引入 在Vue组件的script标签中引入echarts库 使用 echarts import * as echarts f…

动态面板简介以及ERP原型图案列

动态面板简介以及ERP原型图案列 1.Axure动态面板简介2.使用Axure制作ERP登录界面3.使用Asure完成左侧菜单栏4.使用Axuer完成公告栏5.使用Axuer完成左边侧边栏 1.Axure动态面板简介 在Axure RP中&#xff0c;动态面板是一种强大的交互设计工具&#xff0c;它允许你创建可交互的…

【C#】Microsoft C# 之 LINQ 查询语法视频学习总结

1、LINQ - 限制操作符&#xff08;Restriction Operators&#xff09; The where clause of a LINQ query restricts the output sequence. Only the elements that match a condition are added to the output sequence.译文&#xff1a;LINQ查询的where子句限制了输出顺序。…

mysql数据库损坏后重装,数据库备份

重装 先卸载 sudo apt-get remove --purge mysql-server mysql-client mysql-common sudo apt-get autoremove sudo apt-get autoclean 然后重新安装MySQL: sudo apt-get install mysql-server mysql-client 首先要先使用无密码登录数据库一定要使用 sudo mysql -uroo…

TOGAF—架构(Architecture)项目管理

一、简介 1.1概述 架构(Architecture)项目在本质上通常是复杂的。他们需要适当的项目管理来保持正轨并兑现承诺。本指南适用于负责规划和管理架构(Architecture)项目的人员。我们解释了如何用事实上的方法和标准(如PRINCE2或PMBOK)来补充TOGAF架构开发方法(ADM),以加…

跨站点分布式多活存储建设方案概述

1-伴随着私有云、海量非结构数据的爆炸性增长&#xff0c;软件定义存储已经成为用户构建“敏捷IT” 架构的数据基石&#xff0c;同时越来越多的关键业务接入“敏捷IT” 架构。在分布式软件定义存储的产品架构下&#xff0c;怎样既保证对爆炸数据量的平稳承接&#xff0c;又能对…

C#Winform菜鸟驿站管理系统-快递信息管理界面多条件查询实现方法

1&#xff0c;具体的页面设计如下&#xff0c; 2&#xff0c; 关于下拉框数据填充实现&#xff0c;站点选择代码实现如下&#xff0c;因为站点加载在很多界面需要用到&#xff0c;所以把加载站点的方法独立出来如下&#xff1b; /// <summary>/// 加载站点下拉框/// <…

SaaS行业分析

文章目录 什么是SaaS ?SaaS的标准定义什么是软件即服务&#xff1f;SaaS与传统软件的区别 &#xff1f; SaaS行业分析你知道最赚钱的行业是什么&#xff1f;互联网带给企业的变化 SaaS与PaaS、IaaS的区别&#xff1f;IaaS&#xff08;Infrastructure as a Service&#xff09;…