Java如何生成序列号/订单号

Java生成序号】实现自动编号的方法及代码详解 同时,还展示了如何生成带前缀的序号,以满足不同的业务需求。在Java编程中,生成序号是一项常见的需求,无论是用于数据标识、列表展示还是生成唯一的标识符。如果在多线程环境下使用自动生成的序号,需要确保生成的序号是唯一且线程安全的。要实现自增的序号生成,可以使用Java中的AtomicInteger类。在上述代码中,getNextNumber()方法接受一个前缀参数,并将前缀与自增的序号拼接成最终的编号。方法获取自增的序号,然后在第三个和第四个调用中传递了一个前缀参数,生成带有前缀的序号。 阅读详情

https://juejin.cn/post/7035630158706901028

今天给大家带来也是比较实用的功能,用Java来生成序列号/订单号,列举几个在我们生活中比较常见的案例:

  • 订单号

  • 商品编号

  • 交易单号

  • 快递单号

数据存储我是使用的 mysql,下面就向大家分享一下是如何实现的~

理论知识

什么是事务?

数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

脏读、不可重复读、幻读

1、脏读:A 事务对数据修改但还没有提交到数据库,这个时候 B 事务来访问,那么 B 事务对数据就不是最新的,这种现象被成为脏读。

2、不可重复读:A 事务多次读取一个数据,这个时候在中途 B 事务修改了数据,导致 A 事务多次读到的结果不一致。

3、幻读:A 事务在前后两次查询同一个范围的时候、后一次查询看到了前一次查询未看到的行,因为 B 事务在后一次查询前新增加了一条数据。

mysql 的四种隔离级别

按照隔离的级别由低到高,越高的隔离,效率越差,不可重复读,是 MySQL 的默认隔离级别。

bce6adf2a5e405a7ed146f301cad3041.png

1、读未提交:允许别的事务,去读取这个事务为提交之前的数据 缺点:可能会造成脏读、幻读、不可重复读。

2、不可重复读:并发条件下会出现问题,比如:A 用户读取数据, 随后 B 用户读出该数据并修改, 此时 A 用户再读取数据时发现前后两次的值不一致 缺点:可能会造成幻读、不可重复读。

3、可重复读:当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行。缺点:幻读

4、串行化:不会使用 mysql 的 mvcc 机制,在每一个 select 请求下获得读锁,在每一个 update 操作下尝试获得写锁。缺点:效率最差

两种悲观锁

共享锁 (S 锁): 如果事务 T 对数据 A 加上共享锁后,则其他事务只能对 A 再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

排它锁 (X 锁):如果事务 T 对数据 A 加上排他锁后,则其他事务不能再对 A 加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

Java 代码实现

private  String createNewBidNumber() {
        //格式说明 CODE20201111xxx CODE+当前年月日+编号(具体长度看需求)
        String front="CODE";//前缀
        //当前时间编码
        Date date = new Date();
        String bidDate = new SimpleDateFormat("yyyyMMdd").format(date);
        Object bidService=null;//修改为自己的业务代码
        if (bidService != null){// 在数据表中查到了,说明现在这个订单不是今天的第一单
            String bid = bidService.getXXXX(); //取出ID,也就是业务号
            bid = bid.substring(10,13); // 取出后三位数,也就是自动生成的三位数 001
            int num = Integer.valueOf(bid);
            num ++;  // 加1
            if(num<10){
                String bidNum = String.format("%03d", num);//%03d 只是三位,不足补0
                String code = front+bidDate+bidNum;
                return code;
            }
            else if(num<100){
                String bidNum = String.format("%03d", num);//num<100,说明是两位数,前面要补一个0
                String code = front+bidDate+bidNum;
                return code;
            }
            else {
                String bidNum = String.valueOf(num);
                String code =front+bidDate+bidNum;
                return code;
            }
        }else {
            int number = 1;
            String bidNum = "00" + number;
            String code = front+bidDate+bidNum;
            return code;
        }
    }
JAVA生成订单号(日期+流水号) JAVA生成订单号(日期+流水号) java按日期加流水号方式生成订单号,已经测试过,可递增方式生成。 立即下载

相关推荐

Java生成订单号的工具类

该工具类是Java编写下载即可使用,该工具类中有生成各种长度的订单号,有英文数字混合的,有数字的

SnowFlake分布式唯一ID 生成器

Snowflake生成IDtwitter开发的一套全局唯一ID生成算法,要点如下:41位的时间序列(精确到毫秒,41位的长度可以使用69年) 10位的机器标识(10位的长度最多支持部署1024个节点) 12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号) 最高位是符号位,始终为0。简单可靠,性能好,趋势有序,不引入第三方系统。缺点是有使用时间限制,8-100年...

diyujun6099的博客 2011

深入解析 TDA4VM/VH R5F 核中断机制:VIC 与非 VIC 模式下的实战对比与优化

本文深入解析了TI TDA4VM/VH平台中ARMv7-R架构R5F核的两种中断处理机制:VIC模式与非VIC模式。通过对比硬件自动跳转与软件向量表分发的核心流程、实战代码示例及性能差异,为开发者提供了基于实时性、灵活性与调试需求的选择指南和优化建议,帮助构建更稳定的嵌入式系统。

weixin_29159441的博客 100

分布式唯一订单编号生成器

本文介绍了一套高并发环境下生成唯一订单编号的分布式解决方案。该方案通过机器ID唯一性、时间戳防回拨、序列号控并发三大机制,确保订单编号在分布式环境中的绝对唯一性。核心实现包括:基于IP哈希生成3位机器ID,处理时钟回拨问题(最多等待200ms),同一毫秒内通过6位序列号支持100万/毫秒并发,并使用ReentrantLock保证原子性操作。最终生成的订单编号格式为"编码类型+时间字符串(yyyyMMddHHmmssSSS)+机器ID(3位)+序列号(6位)",能彻底解决高并发场景下的订单

Fink-Go小码的博客 7407

PC微信(3.9.2.23)逆向实战:定位并Hook消息接收函数

本文详细介绍了PC微信(3.9.2.23)逆向分析中定位并Hook消息接收函数的完整实战流程。通过Cheat Engine动态定位未读消息数内存地址,结合OllyDbg分析代码上下文,最终找到稳定的Hook点,并分享了实战中的关键注意事项与踩坑经验。

lll78的博客 473

大疆控制算法笔试复习指南:从PID到MPC核心考点解析

控制算法是无人机、机器人等智能装备实现自主运行的核心技术。从经典控制到现代控制,PID控制算法、LQR控制算法、预测控制算法(MPC)以及Stanley控制算法等,构成了工程实践中不可或缺的方法体系。理解其数学原理、适用条件与调参逻辑,是评估系统稳定性、动态响应与抗扰能力的基础。在无人机飞控、云台增稳、车载路径跟踪等典型场景中,这些算法直接决定了设备的实际性能表现。大疆等企业相关岗位的笔试,正是围绕上述核心知识点,考查候选人对控制系统本质的理解、数学推导能力以及工程实现素养。本文整理了一套覆盖理论基石、高频

weixin_33178839的博客 359

探秘Snowflake:分布式ID生成器的高效解决方案

探秘Snowflake:分布式ID生成器的高效解决方案 项目简介 是一个轻量级的Java实现,用于生成全局唯一、无重复的64位ID(称为Snowflake ID),其设计灵感来源于Twitter开源的同名系统。此项目由云严(cloudyan)开发并维护,致力于为微服务架构提供一种简单、高效的ID生成策略。 技术分析 Snowflake ID的结构如下: 1位符号位:由于二进制表示中最高位是符号位...

gitblog_00019的博客 476

PyTorch视觉项目实战:从数据加载到模型部署

PyTorch视觉项目实战:从数据加载到模型部署 ,人工智能,计算机视觉,大模型,AI,随着深度学习在计算机视觉领域的飞速发展,PyTorch 凭借其简洁的代码风格、动态计算图特性以及强大的社区支持,成为众多开发者和研究人员的首选框架。从数据加载、模型构建与训练,到最终的模型部署,PyTorch 提供了一套完整且灵活的解决方案。本文将通过实际项目案例,详细阐述基于 PyTorch 的视觉项目全流程,结合丰富的代码示例和概念解析,帮助读者掌握从项目起步到落地的关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

分布式集群下如何做到唯一序列号

在单机上是递增的,但是由于涉及到分布式环境,每台机器上的时钟不可能完全同步,也许有时候也会出现不是全局递增的情况。在业务上的区别,订单号尽可能要多些冗余的业务信息,比如:滴滴:时间+起点编号+车牌号 淘宝订单:时间戳+用户。集群也可以防止单点故障(系统中一点失效,就会让整个系统无法运作的部件)的问题。字节是所在主机的唯一标识符。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题。通过创建顺序节点,可以确保每个节点的名称是唯一且递增的。

程序猿进阶 5174

GB28181 —— 1、Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台(连接带云台摄像机)

GB28181 —— Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台

5464

Explorer.exe系统错误,电脑重启后刚开始一段时间正常,过一会桌面任务栏就卡死,可以打开任务管理器

联想E14Win10专业版。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 8053

Java自动生成订单号

java生成订单号/出库单号/入库单号等 java自动生成唯一出库单号 /** * @author: * @date: 2019/12/27 * @time: 16:54 * @description: */ public class TimeNumberUtils { public static void main(String[] args) { //测试方法略..自...

weixin_45152583的博客 3819

[Research Tips] 我的zotero文献管理方案: 云端同步+iPad批注+overleaf笔记

文献管理一直是一个很头疼的事. 最初直接在paper上做笔记, 后来尝试各种各样的文献管理软件, 比如endnote, mendeley等, 再后来直接用excel. 每一种方案都不是很满意. 最近尝试了各种软件, 摸索出一个合适自己的文献管理方案, 分享给大家. 我的需求: 支持PDF内全文搜索. 支持笔记搜索. 支持同步 可以批注PDF. 支持word内引用 支持Tex笔记语法 支持标签化管理 目前的方案除了第二个需求, 其他的都支持. 就目前我的经验来说, 除了知网研学可以搜索笔记外, 其他软件都

落日之城 5318

第五篇订单号生成的java代码

订单号的生成 ​ 1. //生成全球唯一码 public static void main(String[] args) { String uuid= UUID.randomUUID().toString(); System.out.println(uuid); 2.生成顺丰订单号 String number=String.format("%05d",1) ; String seq = "SF"+number; System.out.println(seq);

weixin_50298919的博客 1743

YOLO系列专栏(六):YOLO26热力图可视化 | 解析模型推理逻辑,定位检测关键区域

YOLO26作为新一代目标检测模型,其核心优势是高效的特征提取和精准的目标定位,但模型内部的推理过程的“黑盒”特性,给我们的优化带来了很大困扰:❌ 检测精度低:不知道是模型没学到关键特征,还是特征提取不充分;❌ 出现误检/漏检:无法定位问题根源——是锚框不合适?还是特征图未捕捉到目标?❌ 模型优化盲目:调参、修改网络结构全靠“猜”,缺乏针对性;❌ 难以解释模型行为:实际项目中,需要说明模型“为什么检测到这个目标”,尤其是医疗、工业等对可解释性要求高的场景。而热力图可视化。

qq_36130719的博客 740

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

订单号的生成

一.订单号生成的原则: 1.全局的唯一性 2.自增长 3.长度的要求 4.具有一定的可读性 5.保密,不可推测性 6.效率性 二.实现方案 常见的ID生成策略。 1. 数据库自增长序列或字段 2. UUID 3. UUID的变种*【UUID to Int64;NHibernate在其主键生成方式中提供了Comb算法(combined guid/timestamp)】 4. Redi...

一一哥 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java递增序列号_java根据年月日生成订单号+序号

第三步:生成存储订单号。1、主抽象类SerialNumberpublic abstract class SerialNumber {public synchronized String getSerialNumber() {return process();}protected abstract String process();}2、抽象继承类EveryDaySerialNumberimport...

weixin_39972519的博客 1514

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java唯一序列订单号生成源码,基于snowflake算法

Snowflake简介 Snowflake生成的每一个ID都是64位的整型数,它的核心算法也比较简单高效,结构如下: 41位的时间序列,精确到毫秒级,41位长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。 10位的机器标识,10位的长度最多支持部署1024个节点。 12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生成多个ID序...

p812438109的专栏 1万+

订单号/序列号生成常用方案

SnowFlake算法在同一毫秒内最多可以生成多少个全局唯一ID呢:: 同一毫秒的ID数量 = 1024 X 4096 = 4194304。主要是使用时间,生成年月日加自增数,每毫秒最多可以生成9999个订单,当然这个是可以配置的,根据现实业务情况进行定义。占用10bit,其中高位5bit是数据中心ID,低位5bit是工作节点ID,做多可以容纳1024个节点。占用12bit,每个节点每毫秒0开始不断累加,最多可以累加到4095,一共可以产生4096个ID。占用1bit,其值始终是0,没有实际作用。

weixin_45690338的博客 978

java实战:销售订单号自动生成

本文介绍了如何使用Java实现一个销售订单号的自动生成系统,该系统能够在高并发环境下保证订单号的唯一性。我们探讨了几种常见的订单号生成策略,并实现了一个基于数据库的唯一性检查的解决方案。通过本文,可以了解到如何在Java应用程序中生成唯一且有序的订单号。

oandy0的博客 2549

高并发下生成订单号的策略

本文介绍了分布式系统中生成唯一订单号的多种方案,包括数据库自增ID、时间戳+随机数、时间戳+会员ID、GUID/UUID等方法,并分析了各自的优缺点。重点讲解了Twitter的SnowFlake算法,该算法通过组合时间戳、机器ID和序列号生成18位唯一ID,支持高并发场景,单机每秒可生成300万+ID。文章详细解析了SnowFlake的64位二进制结构,并提供了完整的Java实现代码和测试用例,验证了其在单线程和多线程环境下都能保证ID唯一性。该算法适用于需要高效生成全局唯一ID的分布式系统场景。

前G厂程序员/架构/产研经理,AI 进化派,一线 OPC 实践者。 持续分享编程、职场、AI、副业/创业干货~ 4万+

【JAVA】业务系统订单号,流水号生成规则工具类

在设计和实现业务系统的订单号和流水号生成工具时,需考虑多个关键因素以确保系统的稳定性和高效性。首先,唯一性是基础,特别是在分布式环境中,必须确保生成的ID不会重复。其次,有序性有助于提升数据库索引的性能,通常通过时间戳实现。可读性则要求ID中包含时间信息,便于人工识别和排查问题。扩展性方面,ID应支持业务前缀和类型区分,以适应不同的业务需求。性能上,本地生成ID可避免网络开销,而高并发场景下需确保线程安全,避免阻塞。

JAVA领域优质创作者,基于分片网络查询方法专利发明者。 1587

java不重复订单号生成规则

1 import java.text.DateFormat; 2 import java.text.SimpleDateFormat; 3 import java.util.Date; 4 5 public class OrderNo{ 6 private static int sn = 0; 7 8 public sta...

diaofang1862的博客 1491

订单场景-基于Redisson实现订单号生成

订单、指定长度随机码生成是业务系统中重要且不可避免的一个需求,往往在电商系统中,业务量、并发量庞大,如何不重复、快速、安全的生成一个订单号成了需要重点考虑的问题。当生成订单号的逻辑和订单创建、落库逻辑分开,每次点击提交订单时,前端调用单独的生成订单号接口,再拿着生成的订单号去请求订单创建、落库的逻辑,每次生成的订单号都不一致,这样便保证了每次的请求都不是重复的,接下来实现不重复的订单号逻辑即可。需要注意的是,使用分布式锁会增加系统的复杂度和开销,可能会影响系统的性能和可用性。

FirstMrRight的博客 1656
上一篇: 新同事上来就优化了一遍MySQL索引和查询,老板人傻了。。。
下一篇: 圣诞最酷头像,最全版本来了!!
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值