Java如何生成序列号/订单号
点击上方“Java基基”,选择“设为星标”
做积极的人,而不是积极废人!
每天 14:00 更新文章,每天掉亿点点头发...
源码精品专栏
原创 | Java 2021 超神之路,很肝~
中文详细注释的开源项目
RPC 框架 Dubbo 源码解析
网络应用框架 Netty 源码解析
消息中间件 RocketMQ 源码解析
数据库中间件 Sharding-JDBC 和 MyCAT 源码解析
作业调度中间件 Elastic-Job 源码解析
分布式事务中间件 TCC-Transaction 源码解析
Eureka 和 Hystrix 源码解析
Java 并发源码
来源:juejin.cn/post/
7035630158706901028
前言
理论知识
什么是事务?
脏读、不可重复读、幻读
mysql 的四种隔离级别
两种悲观锁
Java 代码实现
前言
今天给大家带来也是比较实用的功能,用Java来生成序列号/订单号,列举几个在我们生活中比较常见的案例:
订单号
商品编号
交易单号
快递单号
数据存储 我是使用的 mysql ,下面就向大家分享一下是如何实现的~
“
推荐下自己做的 Spring Boot 的实战项目:
https://github.com/YunaiV/ruoyi-vue-pro
理论知识
什么是事务?
数据库事务 (简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
脏读、不可重复读、幻读
1、脏读 :A 事务对数据修改但还没有提交到数据库,这个时候 B 事务来访问,那么 B 事务对数据就不是最新的,这种现象被成为脏读。
2、不可重复读 :A 事务多次读取一个数据,这个时候在中途 B 事务修改了数据,导致 A 事务多次读到的结果不一致。
3、幻读 :A 事务在前后两次查询同一个范围的时候、后一次查询看到了前一次查询未看到的行,因为 B 事务在后一次查询前新增加了一条数据。
mysql 的四种隔离级别
按照隔离的级别由低到高,越高的隔离,效率越差 ,不可重复读 ,是 MySQL 的默认隔离级别 。
1、读未提交 :允许别的事务,去读取这个事务为提交之前的数据 缺点:可能会造成脏读、幻读、不可重复读。
2、不可重复读 :并发条件下会出现问题,比如:A 用户读取数据, 随后 B 用户读出该数据并修改, 此时 A 用户再读取数据时发现前后两次的值不一致 缺点:可能会造成幻读、不可重复读。
3、可重复读 :当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行。缺点:幻读
4、串行化 :不会使用 mysql 的 mvcc 机制,在每一个 select 请求下获得读锁,在每一个 update 操作下尝试获得写锁。缺点:效率最差
两种悲观锁
共享锁 (S 锁) : 如果事务 T 对数据 A 加上共享锁后,则其他事务只能对 A 再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
排它锁 (X 锁) :如果事务 T 对数据 A 加上排他锁后,则其他事务不能再对 A 加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
“
推荐下自己做的 Spring Cloud 的实战项目:
https://github.com/YunaiV/onemall
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); // 取出后三位数,也就是自动生成的三位数 001int num = Integer.valueOf(bid);num ++; // 加1if(num<10){String bidNum = String.format("%03d", num);//%03d 只是三位,不足补0String code = front+bidDate+bidNum;return code;}else if(num<100){String bidNum = String.format("%03d", num);//num<100,说明是两位数,前面要补一个0String 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;}}
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Java如何生成序列号/订单号相关推荐
- Java 生成随机订单号
Java 生成随机订单号 /** 根据时间生成随机订单号 */ public class GenerateNum { // 全局自增数 private static int count = 0; // ...
- java生成唯一订单号
/*** 生成唯一订单号* 规则:四位随机数+"M"+格式化到秒的时间+"R"+六位随机数*/public static String getBillCode( ...
- SpringBoot 雪花算法生成商品订单号【SpringBoot系列13】
SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见. 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCl ...
- 生成唯一订单号 工具类
package com.jsy.basic.util.utils;import java.text.SimpleDateFormat; import java.util.Date;/*** @prog ...
- 生成唯一订单号_人人皆知却暗藏玄机的“数据库唯一标识符”
Hello 大家好,今天给大家讲一个几乎所有数据库都支持的特性:生成唯一标识符. 知乎视频www.zhihu.com 详细内容: 唯一标识符应用场景非常多,比如网站注册时自动给新用户一个唯一 ID, ...
- MySQL高并发生成唯一订单号的方法
高并发下生成唯一订单号的存储过程 这个是用mysql写的存储过程,搭配里面一张数据表使用,达到高并发情况下获得唯一订单号的目的:原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于 ...
- 针对微信用户,随机生成商户订单号( OrderSN)
/** * 针对微信支付生成商户订单号,为了避免微信商户订单号重复(下单单位支付), * * @return */ public static String generateOrderSN() {St ...
- php订单怎么生成,四种PHP生成唯一订单号的方法
这几天一直在写个人使用的用户中心,虽然期间遇到不少的问题,但还是一点点的都解决了,也从制作期间学到不少的知识,今天就说一说利用PHP生成订单单的方法. 订单号,大家都不陌生,无论从在网上购物,还是在线 ...
- java获取不重复订单号,Java 生成永不重复的订单号
package com.taiping.test; import java.text.SimpleDateFormat; import java.util.Date; import java.util ...
最新文章
- 领域驱动设计(DDD)架构演进和DDD的几种典型架构介绍(图文详解)
- 百度Create大会:百度AI安全研究的进展与愿景
- oracle 带有变量的语句_【成都校区】Oracle SQL语句之常见优化方法总结
- Java FutureTask示例程序
- arduino扩展板的使用_如何使用Arduino和React为烧烤构建仪表板
- Python中的TCP的客户端UDP学习----第一篇博客
- java中singleton_Singleton是什么,在Java中如何实现
- 图书管理系统(说明文档与相关代码)
- Repeater控件的嵌套使用
- android studio 4.0 去掉标题栏
- android无线投屏到电视盒子,【沙发管家】如何把电脑视频投屏到智能电视/ 电视盒子上?...
- 【经典源码】网络安全--远程控制--Gh0st3.6饭客网络sid版
- 阴阳师服务器维护6,《阴阳师》手游6月24日维护更新公告
- 快速部署k8s单机版
- 职业规划 思维导图
- oracle取同期和上期,取同期和上期数据
- 我们为什么要坚持写博客?
- 程序设计思维与实践 Week12 作业 必做题 A-zjm找数
- 迅时MX8(FXO)8口语音网关连接Elastix+服务器配置
- PCB走线和过孔通流能力的标准、影响因素及其计算软件