zoukankan      html  css  js  c++  java
  • 订单唯一标识

    在平常开发系统,设计表结构的时候,常常需要有一个字段来标识该条记录的唯一性,从java层面和数据库层面不同维度来进行实现

    java生成唯一标识

    版本一

    java自带生成唯一标识UUID

    System.out.println(UUID.randomUUID().toString());
    

    输出

    4880d2b4-bc5f-48d1-ba58-003334276d46
    

    明显地看出来太长了而且很不友好

    版本二

    进一步处理生成8位UUID

        public String[] chars = new String[]
                {
                        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
                        "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                        "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
                };
    
        public String getShortUuid() {
            StringBuffer stringBuffer = new StringBuffer();
            String uuid = UUID.randomUUID().toString().replace("-", "");
            for (int i = 0; i < 8; i++) {
                String str = uuid.substring(i * 4, i * 4 + 4);
                int strInteger = Integer.parseInt(str, 16);
                stringBuffer.append(chars[strInteger % 0x3E]);
            }
    
            return stringBuffer.toString();
        }
        @Test
        public void test4(){
            TestDemo2 testDemo2 = new TestDemo2();
            System.out.println(UUID.randomUUID().toString());
            System.out.println(testDemo2.getShortUuid());
        }
    

    输出

    4880d2b4-bc5f-48d1-ba58-003334276d46
    M3EeoAYr
    

    版本三

    时间戳加上生成的8位UUID

        @Test
        public void test3() {
            TestDemo2 testDemo2 = new TestDemo2();
            String shortUuid = testDemo2.getShortUuid();
            String create_time = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
            System.out.println(create_time+shortUuid);
        }
    

    输出

    20190925101216hh42xxn6
    

    推荐使用时间戳加上生成的8位UUID

    oracle生成唯一标识

    版本一

    序列号生成唯一标识

    创建序列

    -- Create sequence 
    create sequence SEQ_ORDER_ID
    minvalue 100000
    maxvalue 999999
    start with 414591
    increment by 1
    nocache
    cycle;
    
    
    字段 说明
    minvalue 定义序列生成器能产生的最小值
    maxvalue 定义序列生成器能产生的最大值
    start with 定义序列的初始值(即产生的第一个值),默认为1
    increment by 定义序列的步长(增长量),如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的
    nocache 表示不对序列进行内存缓冲
    cycle 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环

    获取序列号

    SELECT SEQ_ORDER_ID.NEXTVAL FROM DUAL;
    

    输出

    414785
    
    

    版本二

    时间戳加上序列号

    SELECT TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')||SEQ_ORDER_ID.NEXTVAL FROM DUAL;
    
    

    输出

    20190925102115414805
    
    

    推荐使用时间戳加上序列号

  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/lisingshen/p/11585975.html
Copyright © 2011-2022 走看看