教你用JAVA ID生成器去生成逻辑主键

mybatis-plus代码生成器:主键生成策略配置 背景:为了提升开发效率,利用mybatisplus API读取数据库表结构生成对应的实体entity、服务service,通过模板生成映射mapper。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 在一个数据库设计里,假如使用了逻辑主键,那么你一般都需要一个ID生成器去生成逻辑主键。 在许多数据库里面,都提供了ID生成的机制,如Oracle中的sequence,MSSQL中的identity,可惜这些方法各种数据库都不同的,所以很多人愿意找寻一种通用的方式。 编写代码,1、2、3……这样一直累加是最直接的想法,JAVA用以下方式去实现 private static AtomicInteger uniqueId = new AtomicInteger(0); public static String nextId() { return Integer.toString(uniqueId.incrementAndGet()); } 当然,这样太简单了,并且一重新启动,计数器就归 0 了,一般的做法可以用 时间 计数器 的方式, private static final long ONE_STEP = 10; private static final long BASE = 1129703383453l; private static final Lock LOCK = new ReentrantLock(); private static long lastTime = System.currentTimeMillis(); private static short lastCount = 0; /** * a time (as returned by {@link System#currentTimeMillis()}) at which * the VM that this UID was generated in was alive * @serial */ private final long time; /** * 16-bit number to distinguish UID instances created * in the same VM with the same time value * @serial */ private final short count; /** * Generates a UID that is unique over time with * respect to the host that it was generated on. */ public UID() { LOCK.lock(); try { if (lastCount == ONE_STEP) { boolean done = false; while (!done) { long now = System.currentTimeMillis(); if (now == lastTime) { // pause for a second to wait for time to change try { Thread.currentThread().sleep(1); } catch (java.lang.InterruptedException e) { } // ignore exception continue; } else { lastTime = now; lastCount = 0; done = true; } } } time = lastTime; count = lastCount ; } finally { LOCK.unlock(); } } 在一个群集的环境里面,通常还需要加上IP的前缀,即 IP 时间 计数器,这个就是JAVA原版本的实现了。
java主键生成 id java主键生成,通过自定义前缀加时间生成机制,是主流项目的常用方法,有的是通过JAVA实现,有的是通过存储过程,其实都差不多 立即下载

相关推荐

机器学习-深嵌交叉验证(Nested Cross-Validation)

Section I: Code and Analyses 第一部分:代码 from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from...

Santorinisu Blogs 2716

java 类设置id生成策略

public class Data_Brand  implements Serializable  { //5.2.60  @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id;//自序ID,默认生成策略 private String Brand_Name;//品牌名称brandName  brand

qq_38677871的博客 2022

计算机网络自顶向下(第八版)第一章课后习题

电路交换网络具有以下优点:资源独占性,在建立连接时,电路交换网络为通信双方独占一条物理路径,不会受到其他用户的影响。低时延,由于建立了专用路径,数据传输时延较小,适合对时延敏感的应用,如实时语音和视频通信。数据链路层:提供节点之间可靠的数据传输,主要任务是错误检测和纠正,以及数据帧的传输和访问控制。移动蜂窝网络:如4G LTE和5G,通过移动基站提供的无线信号实现移动设备的互联网接入。网络层:负责数据包的路由和转发,主要任务是通过网络选择最佳路径,进行流量控制和拥塞控制。手机,服务器,路由器,电脑;

hiahiakk的博客 2256

表结构快速生成java_对象创建,表结构就会自动生成

1.目录2.user.java1 package com.itheima.domain;23 public class user {45 private integer id;6 private string name;7 private integer age;8 public integer getid() {9 return id;10 ...

weixin_36310597的博客 546

高通Camx架构调试不求人:手把手教你开UMD/KMD Log与Dump图像(附离线Log合成脚本)

本文详细介绍了高通Camx架构的调试方法,包括UMD/KMD Log的精准配置与图像Dump技术,帮助工程师快速定位移动影像系统中的问题。通过实战案例和自动化脚本,提升调试效率,适用于图像色彩异常、帧率波动等常见问题的诊断与解决。

weixin_30516243的博客 254

TI毫米波雷达人体生命体征(呼吸、心跳)信号提取算法(IWR6843ISK+DCA1000EVM)

本篇内容介绍的算法主要为传统的提取算法,但可实现在1m内呈现良好的检测效果,能够提取出非常可观的呼吸和心跳波形,但在超出1m的距离后便不适用这个算法了。远距离检测呼吸和心跳始终是这个领域一个很大的挑战。要实现远距离检测可在提取相位信号、分离呼吸和心跳信号上进行改进处理,例如线性解调提取相位、改进的VMD分离呼吸和心跳算法。

m0_61934621的博客 3万+

Java中生成唯一ID的方法

有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID。 UUID 从Java 5开始, UUID 类提供了一种生成唯一ID的简单方法。UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,UUID来源于OSF(Open Software Foundation,开源软件基金会)的D...

王浩的技术博客 2万+

【联邦学习】联邦平均(FedAvg)_附pytorch代码实现

其他代码包括1)数据集划分;2)训练;3)保存结果;4)绘图都可在 https://github.com/kt4ngw/fedavg-pytorch 找到。如果您对文章有建议及指定,也欢迎您留言评论,作者定当虚心修正。

kt4ngw的博客 5109

Java生成id方式

雪花算法生成id 启动类 /** * 雪花算法. * * @param dataSource * @param environment * @return */ @Bean public TwitterSnowflakeIdGenerator twitterSnowflakeIdGenerator(DataSource dataSource, Environment environment) { return TwitterSnowflakeIdGenerator.creat

weixin_46032954的博客 2308

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

1945

Weibull Distribution韦布尔分布的深入详述(1)原理和公式

本章介绍韦布尔分布(weibull distribution)和实践之基本公式和推导。 韦伯分布被经常用来对失效性(Failure)或者,反而言之为,可靠性,进行衡量的工具。他的目标就是构建一个失效性分析的模型,或者说构建一个失效性分析的Pattern.【Franklin案,在展示CDF公式的之前,不得不提我们的国内的某些度知识里面的公式,采用的希腊字母完全和国外的不同,然而,很多希腊字母在使用中有特定的意义,本文采用的是通用的表达公式】 F(x)={1−e−(xλ)kx≥00x..............

山云的专栏 8万+

java单例模式生成id_序列键生成器及单例多例模式

有时候我们希望生成全局唯一的序列号。可以用于生成主键或者生成全局的序列号用于生成编号或者其他。这时候我们可以用SQL语句自行管理键值。使用一个表来存储所有的键列值。如下表所示:keyvaluePO_NUMBER105SE_NUMBER2555......1. 存储方式:预定式键值存储:在预定一个值时首先将值更新为下一个可用值,然后查出来之后提供给客户端使用。这样万一出现中断的话顶多是浪费这几个键...

weixin_31952675的博客 595

大数据领域数据服务的数据分析工具推荐

你有没有过这样的经历?——领导说“帮我分析一下上个月的销量”,你打开Excel却发现数据有100万行,电脑直接卡死;或者想实时知道“现在直播间的观众在买什么”,却不知道用什么工具处理每秒10万条的点击数据。本文的目的:帮你解决“选什么工具做什么事”的问题,覆盖大数据服务的全流程(采集→存储→处理→分析→可视化),推荐高频、实用、易上手的工具,并讲清楚它们的“适用场景”和“优缺点”。范围。

大数据洞察的博客 1931

java id主键_教你用JAVA ID生成器去生成逻辑主键

一起学习在一个数据库设计里,假如使用了逻辑主键,那么你一般都需要一个ID生成器去生成逻辑主键。在许多数据库里面,都提供了ID生成的机制,如Oracle中的sequence,MSSQL中的identity,可惜这些方法各种数据库都不同的,所以很多人愿意找寻一种通用的方式。编写代码,1、2、3……这样一直累加是最直接的想法,JAVA用以下方式去实现private static AtomicIntege...

weixin_30783363的博客 714

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java id 生成器_JAVA ID生成器生成逻辑主键_java

在一个数据库设计里,假如使用了逻辑主键,那么你一般都需要一个ID生成器去生成逻辑主键。在许多数据库里面,都提供了ID生成的机制,如oracle中的sequence,MSSQL中的identity,可惜这些方法各种数据库都不同的,所以很多人愿意找寻一种通用的方式。编写代码,1、2、3……这样一直累加是最直接的想法,java用以下方式去实现privatestaticAtomicIntegerun...

weixin_29215509的博客 403

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MyBatis-Flex多主键策略:自定义主键生成器完全指南

MyBatis-Flex是一款优雅的MyBatis增强框架,提供了强大的多主键支持和灵活的自定义主键生成器功能。本文将详细介绍如何在MyBatis-Flex中实现多主键策略以及如何创建自定义主键生成器,帮助开发者轻松应对各种复杂的主键生成场景。 ## 多主键策略概述 在数据库设计中,多主键(复合主键)是一种常见的需求,尤其是在处理多对多关系或需要联合唯一约束的场景。MyBatis-Flex通过

gitblog_00017的博客 823

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java怎样生成32位全是整形的主键_分库分表的 9种分布式主键ID 生成方案,挺全乎的...

《sharding-jdbc 分库分表的 4种分片策略》 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为分片表生成全局唯一的主键 ID。引入任何一种技术都是存在风险的,分库分表当然也不例外,除非库、表数据量持续增加,大到一定程度,以至于现有高可用架构已无法支撑,否则不建议大家做分库分表,因为做了数据分片后,你会发现...

weixin_29018335的博客 255

应用程序中主键ID生成与UUID

应用程序中主键ID生成与UUID 1.ID生成策略  在一个数据库设计里,假如使用了逻辑主键,那么你一般都需要一个ID生成器去生成逻辑主键。    在许多数据库里面,都提供了ID生成的机制,如Oracle中的sequence,MSSQL中的identity,可惜这些方法各种数据库都不同的,所以很多 人愿意找寻一种通用的方式。    编写代码,1、2、3……这样一直累加是最直接的想法,JAVA用以下方式去实现    private static AtomicInteger uniqueId = new At

attilax的专栏 4808

java自增id生成策略_ID生成策略(一)

ID生成策略:主键手工设定很不方便,在我们实际工作中在MySQL里面用自增字段auto increment,在oracel中一般用sequence。所以把表建成auto increment,对于类里面对象的对应的值就不能指定了,得靠程序或数据库自动生成,hibernate或JPA就实现了这样的功能,我们可以通过设置告诉这个字段怎么生成,这样写程序的时候就不用设定了。这个就叫ID的生成策略。动手实验...

weixin_42425947的博客 3572

【MyBatis-Plus】DML编程控制 代码生成器

查询相关的操作我们已经介绍完了,紧接着我们需要对另外三个,增删改进行内容的讲解。挨个来说明下,首先是新增(insert)中的内容。前面我们在新增的时候留了一个问题,就是新增成功后,主键ID是一个很长串的内容,我们更想要的是按照数据库表字段进行自增长,在解决这个问题之前,我们先来分析下ID该如何选择:不同的业务采用的ID生成方式应该是不一样的,那么在MP中都提供了哪些主键生成策略,以及我们该如何进行选择?在这里我们又需要用到MP的一个注解叫在构建条件查询之前,我们先来准备下环境创建一个SpringBoot项目

Javascript_tsj的博客 7147

【java - 最常用的3种ID生成器】

3种最常见的id生成器的选择(几乎覆盖全部业务场景)

zx020986的博客 419

java获取mysql表主键id_mysql 生成唯一全局主键ID

mysql生成全局唯一ID全局唯一ID生成策略多种多样,这里列举几例以供参考。1 使用auto_increment_increment和auto_increment_offset这两个服务器变量可以让mysql以期望的值和偏移量来增加auto_increment列的值。举个例子,两台服务器,可以配置这两台服务器自增步长都是2,其中一台的偏移量设置为1,另一台设置为2,这样每台服务器生成的ID就是唯...

weixin_26849971的博客 1036

Spring Data ID生成策略终极指南:自定义主键与复合主键实战

Spring Data ID生成策略是数据库设计中至关重要的环节,合理的ID生成机制不仅能提升系统性能,还能确保数据的一致性和完整性。在这篇完整的指南中,我们将深入探讨Spring Data JDBC提供的多种ID生成方案,从基础的自动生成到复杂的复合主键实现,帮助开发者选择最适合业务场景的解决方案。 ## 🔑 Spring Data ID生成策略的5种核心方法 ### 1. 数据库自动生成

gitblog_00720的博客 956
上一篇: JDO技术分析及如何进入企业应用的研究
下一篇: Java设计模式之计数代理模式
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值