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.rhkb.cn/news/219930.html

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

相关文章

css3实现动态心电图折线

css3实现动态心电图折线 M&#xff08;moveto&#xff09;&#xff1a;需要两个参数&#xff08;x轴和y轴坐标&#xff0c;移动到的点的x轴和y轴的坐标L&#xff08;lineto&#xff09;&#xff1a;需要两个参数&#xff08;x轴和y轴坐标&#xff09;&#xff0c;它会在当前位置…

汽车充电协议OpenV2G的平替cbexigen!!

纵所周知&#xff0c;开源欧规协议 CCS 的 OpenV2G 协议不支持 ISO15118-20:2022 协议&#xff0c;并且软件维护者已经明确不在进行该软件的维护。 前几天在 Github 上冲浪发现了一个宝藏开源项目&#xff0c;完美的实现的 OpenV2G 的 Exidizer 工具的功能&#xff1a;cbexigen…

云仓酒庄的品牌雷盛红酒LEESON分享香槟为什么是“酸”的?

云仓酒庄致力成为红酒爱好者的首选供应商。云仓酒庄品牌雷盛红酒多系列、多国家、多价位区间的多品种供货&#xff0c;使得酒品丰富而多样&#xff0c;既可以整箱方式销售&#xff0c;也可以单瓶模式购买&#xff0c;全管道使成本更低&#xff0c;降低中间仓储环节、支线物流仓…

HarmonyOS开发实战:如何实现一个运动排名榜页面

HarmonyOS开发实战&#xff1a;如何实现一个运动排名榜页面 代码仓库&#xff1a; 运动排名榜页面 项目介绍 本项目使用声明式语法和组件化基础知识&#xff0c;搭建一个可刷新的排行榜页面。在排行榜页面中&#xff0c;使用循环渲染控制语法来实现列表数据渲染&#xff0c;…

【Unity自动寻路】使用Navigation系统实现物体自动寻路绕开障碍物

知识点流程图 自动导航Navigation系统 我们在游戏场景中经常会有一些障碍物、墙壁、树木等等&#xff0c;如果我想要让角色或者怪物去墙的另一边&#xff0c;我直接在墙另一边点击左键&#xff0c;我希望角色自动跑过去&#xff0c;但是他不能直接穿透墙&#xff0c;他需要“智…

安卓开发学习---kotlin版---笔记(二)

UI学习 UI分类 安卓的UI分为两大类&#xff1a;一类叫做View视图&#xff0c;一类叫做ViewGroup容器 View视图&#xff1a;TextView,Button,ImageView都是常见的视图ViewGroup容器&#xff1a;内部尅承载、放置、添加View视图的容器 布局方式 安卓布局主要有&#xff1a;线…

【智能算法】11种混沌映射算法+2种智能算法示范【鲸鱼WOA、灰狼GWO算法】

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 混沌映射算法是我们在智能算法改进中常用到的方法&#xff0c;本程序充分考虑改进算法应用的便捷性&#xff0c;集成了11种混合映射算法&#xff0c;包括Singer、tent、Logistic、Cubic、chebyshev、Piecewise…

原生html + vue3 获取引用元素refs - elementUI如何在setup中进行表单校验设置

背景&#xff1a; 原生Html 引入elementPlust vue3 &#xff0c;需要在vue3 setup里做表单校验&#xff0c;通过el-form refform 的refs元素执行校验。 解决方案1&#xff1a; 保存vue挂载之后实例vm为一个常量&#xff0c;由实例来获取&#xff1a;vm.$refs.form.validate(…

iClient3D 图元操作

1. S3MTilesLayer&#xff0c;S3M(Spatial 3D Model)图层类 S3MTilesLayer&#xff0c;S3M(Spatial 3D Model)图层类&#xff0c;通过该图层实现加载三维切片缓存&#xff0c;包括倾斜摄影模型、BIM模型、点云数据、精细模型、矢量数据、符号等。 那S3MTilesLayer中针对图元的…

AI性能再提升12.5%,ZStack Cube 超融合一体机基于第五代英特尔®至强®可扩展处理器解决方案发布

12月15日&#xff0c;以“Al无处不在&#xff0c;创芯无所不及”为主题的2023英特尔新品发布会暨AI技术创新派对上&#xff0c;云轴科技ZStack与英特尔联合发布基于第五代英特尔 至强 可扩展处理器的 ZStack Cube 超融合一体机解决方案白皮书&#xff08;简称解决方案&#xff…

二进制枚举算法

二进制 : 也就是只有0和1的进制表示 ; 二进制枚举算法 一个二进制数 x 可以表示 S 的一个子集&#xff0c;某个二进制位i上为0表示没有选i元素&#xff0c;为1表示选了该元素放入子集,比如13为1101就表示选了0,2,3号元素;对于一个长度为N的序列(也就是包含N个元素)有2^N个子…

C++之程序生成

一、C的发展史 截止到2023年12月&#xff0c;C已经更新了很多版本&#xff0c;并在每个版本中修复了bug和添加了新的特性&#xff0c;ISO C委员会每三年会对C进行一次更新&#xff1a; C98&#xff1a;于1998年发布&#xff0c;是最早的国际标准化版本。它包含了面向对象编程…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 王炸产品Amazon Q,你的AI助手

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 意料之中 2023年9月25日&#xff0c;亚马逊宣布与 Anthropic 正式展开战略合作&#x…

机器学习 | 决策树 Decision Tree

—— 分而治之&#xff0c;逐个击破 把特征空间划分区域 每个区域拟合简单模型 分级分类决策 1、核心思想和原理 举例&#xff1a; 特征选择、节点分类、阈值确定 2、信息嫡 熵本身代表不确定性&#xff0c;是不确定性的一种度量。 熵越大&#xff0c;不确定性越高&#xff0c;…

OpenAI 偷偷在训练 GPT-4.5!?

最近看到有人已经套路出 ChatGPT 当前的版本&#xff0c;回答居然是 gpt-4.5-turbo&#xff1a; 实际试验下&#xff0c;用 starflow.tech&#xff0c;切换到小星 4 全能版&#xff08;同等官网最新 GPT-4&#xff09;&#xff0c;复制下面这段话问它&#xff1a; What is the…

人工智能在金融与商业领域的智能化变革

导言 随着人工智能技术的不断发展&#xff0c;金融和商业领域正迎来一场智能化的变革。随着人工智能的不断发展&#xff0c;其在金融和商业领域的应用正成为业界瞩目的焦点。本文将深入探讨人工智能在金融和商业应用中的关键技术、应用场景以及对未来的影响。 1. 关键技术与算…

数据结构:队列

数据结构&#xff1a;队列 文章目录 数据结构&#xff1a;队列1.队列常用操作&#xff1a;2.队列的实现3.队列典型应用 ***「队列 queue」是一种遵循先入先出规则的线性数据结构。***队列模拟了排队现象&#xff0c;即新来的人不断加入队列尾部&#xff0c;而位于队列头部的人逐…

ceph的osd盘删除操作和iscsi扩展

ceph的osd盘删除操作 拓展:osd磁盘的删除(这里以删除node1上的osd.0磁盘为例) 1, 查看osd磁盘状态 [rootnode1 ceph]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.00298 root default -3 0.00099 host node10 hdd 0.00…

微服务实战系列之ZooKeeper(下)

前言 通过前序两篇关于ZooKeeper的介绍和总结&#xff0c;我们可以大致理解了它是什么&#xff0c;它有哪些重要组成部分。 今天&#xff0c;博主特别介绍一下ZooKeeper的一个核心应用场景&#xff1a;分布式锁。 应用ZooKeeper Q&#xff1a;什么是分布式锁 首先了解一下&…

云原生向量计算引擎 PieCloudVector:为大模型提供独特记忆

拓数派大模型数据计算系统&#xff08;PieDataComputingSystem&#xff0c;缩写&#xff1a;πDataCS&#xff09;在10月24日程序员节「大模型数据计算系统」2023拓数派年度技术论坛正式发布。πDataCS 以云原生技术重构数据存储和计算&#xff0c;「一份存储&#xff0c;多引擎…