最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java生成唯一訂單號(hào)的幾種方式

 更新時(shí)間:2025年03月21日 09:28:40   作者:周董思密達(dá)  
這篇文章主要介紹了Java生成唯一訂單號(hào)的幾種方式,訂單號(hào)具有唯一標(biāo)識(shí)符的作用,下邊將演示自增、隨機(jī)、組合的方式,生成高效、安全、唯一的訂單號(hào),以滿足業(yè)務(wù)需求和避免潛在問(wèn)題,需要的朋友可以參考下

前言

訂單號(hào)具有唯一標(biāo)識(shí)符的作用,下邊將演示自增、隨機(jī)、組合的方式,生成高效、安全、唯一的訂單號(hào),以滿足業(yè)務(wù)需求和避免潛在問(wèn)題。

自增

自增常見(jiàn)的有:純數(shù)字自增時(shí)間+數(shù)字自增、數(shù)據(jù)庫(kù)主鍵id自增

純數(shù)字自增

需求:生成8位自增數(shù)字的訂單號(hào),不足8位前綴補(bǔ)0。

實(shí)現(xiàn):使用redis的incr函數(shù)完成此需求。

@RestController
@RequestMapping("/testOrderCode")
public class TestOrderCodeController {
    @Resource
    private RedisTemplate<String, Integer> redisTemplate;
    private static final String TEST_ORDER_CODE_KEY = "test_order_code_key";

    @GetMapping("/test")
    public String test() {
        //使用incr獲取自增的訂單號(hào)
        Long increment = redisTemplate.opsForValue().increment(TEST_ORDER_CODE_KEY);
        //將訂單號(hào)不足8位前綴補(bǔ)0,"%08d",%0表示前綴補(bǔ)0,8表示補(bǔ)充8位,d表示數(shù)字類(lèi)型
        String oderCode = String.format("%08d", increment);
        return oderCode;
    }
}
輸出結(jié)果:00000001

時(shí)間+數(shù)字自增

需求:使用年月日(yyMMdd)當(dāng)訂單號(hào)前綴,后四位使用當(dāng)日訂單號(hào)自增。

實(shí)現(xiàn):獲取yyMMdd格式的時(shí)間字符串,然后將該字符串作為redis的key使用,并給該key設(shè)置一天的過(guò)期時(shí)間。后四位數(shù)字自增使用redis的 incr函數(shù)實(shí)現(xiàn)。

@RestController
@RequestMapping("/testOrderCode")
public class TestOrderCodeController {
    @Resource
    private RedisTemplate<String, Integer> redisTemplate;
    private static final String TEST_ORDER_CODE_KEY = "test_order_code_key";

    @GetMapping("/test")
    public String test() {
        // 定義日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMMdd");
        //根據(jù)當(dāng)前時(shí)間獲取yyMMdd格式的時(shí)間字符串
        String format = LocalDate.now().format(formatter);
        //判斷是否存在key,不存在則設(shè)置1天的過(guò)期時(shí)間
        if (Boolean.FALSE.equals(redisTemplate.hasKey(format))) {
            redisTemplate.expire(format, 1, TimeUnit.DAYS);
        }
        //使用incr獲取自增的訂單號(hào)
        Long increment = redisTemplate.opsForValue().increment(format);
        //將訂單號(hào)不足4位前綴補(bǔ)0,"%04d",%0表示前綴補(bǔ)0,4表示補(bǔ)充4位,d表示數(shù)字類(lèi)型
        String oderCode = String.format("%04d", increment);
        return format + oderCode;
    }
}
輸出結(jié)果:2412260001

數(shù)據(jù)庫(kù)主鍵id自增

需求:生成8位自增數(shù)字的訂單號(hào),不足8位前綴補(bǔ)0。

實(shí)現(xiàn):使用數(shù)據(jù)庫(kù)自增主鍵實(shí)現(xiàn)該需求。先保存訂單到數(shù)據(jù)庫(kù),取訂單id,再將id前綴補(bǔ)0操作后更新到數(shù)據(jù)庫(kù)中。

@RestController
@RequestMapping("/testOrderCode")
public class TestOrderCodeController {
    @Resource
    private OrdersMapper orderMapper;

    @GetMapping("/test")
    public String test() {
        //保存訂單,并獲取id
        OrdersDO ordersDO = new OrdersDO();
        orderMapper.insert(ordersDO);
        Long id = ordersDO.getId();
        //將訂單號(hào)不足8位前綴補(bǔ)0,"%08d",%0表示前綴補(bǔ)0,8表示補(bǔ)充8位,d表示數(shù)字類(lèi)型
        String oderCode = String.format("%08d", id);
        //更新訂單號(hào)
        orderMapper.updateById(ordersDO.setOrderCode(oderCode));
        return oderCode;
    }
}
輸出結(jié)果:00000001

隨機(jī)

隨機(jī)常見(jiàn)的有:隨機(jī)數(shù)UUID、分布式全局唯一id(雪花算法)

隨機(jī)數(shù)

需求:生成隨機(jī)的訂單號(hào)。

實(shí)現(xiàn):使用Random生成隨機(jī)數(shù)。

import cn.hutool.core.util.RandomUtil;

@RestController
@RequestMapping("/testOrderCode")
public class TestOrderCodeController {
    @Resource
    private OrdersMapper orderMapper;

    @GetMapping("/test")
    public String test() {
        // 定義日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMMdd");
        //根據(jù)當(dāng)前時(shí)間獲取yyMMdd格式的時(shí)間字符串
        String format = LocalDate.now().format(formatter);
        //生成隨機(jī)8位數(shù)字
        String random = RandomUtil.randomNumbers(8);
        //時(shí)間+隨機(jī)數(shù)組成訂單號(hào)
        String oderCode = format + random;
        //判斷生成的訂單號(hào)在數(shù)據(jù)庫(kù)中是否存在,如果存在則繼續(xù)隨機(jī)生成訂單號(hào)
        while (orderMapper.selectCount(Wrappers.lambdaQuery(OrdersDO.class).eq(OrdersDO::getOrderCode, oderCode)) > 0){
            oderCode = format + RandomUtil.randomNumbers(8);
        }
        return oderCode;
    }
}
輸出結(jié)果:24122683230048

UUID

需求:生成隨機(jī)的訂單號(hào)。

實(shí)現(xiàn):使用UUID實(shí)現(xiàn)該需求。

import java.util.UUID;

@RestController
@RequestMapping("/testOrderCode")
public class TestOrderCodeController {

    @GetMapping("/test")
    public String test() {
        // 生成一個(gè)UUID
        UUID uuid = UUID.randomUUID();
        // 將UUID轉(zhuǎn)換為字符串,并移除分隔符
        String oderCode = uuid.toString().replace("-", "");
        return oderCode;
    }
}
輸出結(jié)果:8a45cd3458b640789ed3c9ef223d090b

分布式全局唯一id(雪花算法)

需求:生成隨機(jī)的訂單號(hào)。

實(shí)現(xiàn):使用分布式全局唯一id(雪花算法)實(shí)現(xiàn)該需求。

import cn.hutool.core.lang.Snowflake;

@RestController
@RequestMapping("/testOrderCode")
public class TestOrderCodeController {

    @GetMapping("/test")
    public String test() {
        // 創(chuàng)建一個(gè)雪花算法ID生成器實(shí)例,通常你需要指定終端ID和數(shù)據(jù)中心ID
        Snowflake snowflake = new Snowflake(1, 1);
        String oderCode = snowflake.nextIdStr();
        return oderCode;
    }
}
輸出結(jié)果:1872140136729415680

結(jié)語(yǔ)

到此這篇關(guān)于Java生成唯一訂單號(hào)的幾種方式的文章就介紹到這了,更多相關(guān)Java生成唯一訂單號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲(chóng)之爬取2020女團(tuán)選秀數(shù)據(jù)

    Python爬蟲(chóng)之爬取2020女團(tuán)選秀數(shù)據(jù)

    本文將對(duì)比《青春有你2》和《創(chuàng)造營(yíng)2020》全體小姐姐,鑒于兩個(gè)節(jié)目的數(shù)據(jù)采集和處理過(guò)程基本相似,在使用Python做數(shù)據(jù)爬蟲(chóng)采集的章節(jié)中將只以《創(chuàng)造營(yíng)2020》為例做詳細(xì)介紹。感興趣的同學(xué)可以照貓畫(huà)虎去實(shí)操一下《青春有你2》的數(shù)據(jù)爬蟲(chóng)采集,需要的朋友可以參考下
    2021-04-04
  • 如何在Spring WebFlux的任何地方獲取Request對(duì)象

    如何在Spring WebFlux的任何地方獲取Request對(duì)象

    這篇文章主要介紹了如何在Spring WebFlux的任何地方獲取Request對(duì)象,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2021-01-01
  • 淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別

    淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別

    本文主要介紹了淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Java 多線程Synchronized和Lock的區(qū)別

    Java 多線程Synchronized和Lock的區(qū)別

    這篇文章主要介紹了Java 多線程Synchronized和Lock的區(qū)別,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • Spring核心之IOC與bean超詳細(xì)講解

    Spring核心之IOC與bean超詳細(xì)講解

    IOC-Inversion of Control,即控制反轉(zhuǎn)。它不是什么技術(shù),而是一種設(shè)計(jì)思想。這篇文章將為大家介紹一下Spring控制反轉(zhuǎn)IOC的原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-10-10
  • fastjson對(duì)JSONObject中的指定字段重新賦值的實(shí)現(xiàn)

    fastjson對(duì)JSONObject中的指定字段重新賦值的實(shí)現(xiàn)

    這篇文章主要介紹了fastjson對(duì)JSONObject中的指定字段重新賦值的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java中將list用逗號(hào)隔開(kāi)拼成字符串的4種方法例子

    java中將list用逗號(hào)隔開(kāi)拼成字符串的4種方法例子

    我們經(jīng)常在開(kāi)發(fā)過(guò)程之中會(huì)遇到需要把返回的Id list轉(zhuǎn)換為一個(gè)使用逗號(hào)(,)分隔的字符串,下面這篇文章主要給大家介紹了關(guān)于java中將list用逗號(hào)隔開(kāi)拼成字符串的4種方法例子,需要的朋友可以參考下
    2024-01-01
  • 通過(guò)java.util.TreeMap源碼加強(qiáng)紅黑樹(shù)的理解

    通過(guò)java.util.TreeMap源碼加強(qiáng)紅黑樹(shù)的理解

    通過(guò)分析java.util.TreeMap源碼來(lái)對(duì)經(jīng)典問(wèn)題紅黑樹(shù)加強(qiáng)理解和理清思路。
    2017-11-11
  • Java微信公眾平臺(tái)之獲取地理位置

    Java微信公眾平臺(tái)之獲取地理位置

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)之獲取地理位置的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 詳解SpringBoot時(shí)間參數(shù)處理完整解決方案

    詳解SpringBoot時(shí)間參數(shù)處理完整解決方案

    這篇文章主要介紹了詳解SpringBoot時(shí)間參數(shù)處理完整解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論

铜山县| 望江县| 唐河县| 仁怀市| 阜宁县| 南投县| 长沙县| 库尔勒市| 德江县| 长海县| 天长市| 铜陵市| 马尔康县| 武安市| 闻喜县| 嘉定区| 桐庐县| 郎溪县| 天全县| 渝北区| 拜城县| 嘉黎县| 巫溪县| 揭西县| 焦作市| 凤阳县| 鄂尔多斯市| 湾仔区| 竹北市| 淅川县| 左权县| 蕲春县| 河津市| 隆昌县| 曲阳县| 桐柏县| 高台县| 四会市| 嘉义县| 凤城市| 团风县|