• 自动生成id


    参考:

    https://mp.baomidou.com/guide/id-generator.html

    一般自动生成修改数据库字段方法

    1、数据库实体类

    对于主键来说
    @TableId(value = "REFID",type = IdType.ID_WORKER_STR)
    private String refid;

    package com.uih.servicecenter.common.entity;
    
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    import java.io.Serializable;
    import java.sql.Timestamp;
    
    /**
     * @ClassName: BaseEntity
     * @Description: 基础实体类
     * @Author: liang.yan@united-imging.com
     * @date: 2019/8/15
     *
     *
     */
    @Data
    public class BaseEntity implements Serializable {
        private static final long serialVersionUID = 7732699947578613249L;
        /**
         * 主键
         */
        @TableId(value = "REFID",type = IdType.ID_WORKER_STR)
        private String refid;
        /**
         *createUserRefid 创建者关联id
         */
        @TableField(value = "CREATE_USER_REFID",fill = FieldFill.INSERT)
        private String createUserRefid;
    
        /**
         *createDateTime 创建时间
         */
        @TableField(value = "CREATE_DATETIME",fill = FieldFill.INSERT)
        private Timestamp createDatetime;
    
        /**
         *modifyUserRefid 修改者关联id
         */
        @TableField(value = "MODIFY_USER_REFID",fill = FieldFill.UPDATE)
        private String modifyUserRefid;
    
        /**
         *modifyDateTime 修改时间
         */
        @TableField(value = "MODIFY_DATETIME", fill = FieldFill.INSERT_UPDATE)
        private Timestamp modifyDatetime;
    
        /**
         *version 版本号
         */
        @TableField(value = "VERSION")
        private Integer version;
    
        /**
         * 是否有效
         */
        @TableField(value = "ACTIVE",fill = FieldFill.INSERT)
        private Integer active;
    
        /**
         *  deleted 删除状态
         */
        @TableField(value = "DELETED",fill = FieldFill.INSERT)
        private Integer deleted;
    }
    View Code

    2、数据库字段

    CREATE TABLE `device_info` (
    `REFID` varchar(32) NOT NULL,
    `ACTIVE` tinyint(1) DEFAULT NULL,
    `DELETED` tinyint(1) DEFAULT NULL,
    `CREATE_USER_REFID` varchar(32) DEFAULT NULL,
    `CREATE_DATETIME` datetime DEFAULT NULL,
    `MODIFY_USER_REFID` varchar(32) DEFAULT NULL,
    `MODIFY_DATETIME` datetime DEFAULT NULL,
    `VERSION` smallint(6) DEFAULT NULL,
    PRIMARY KEY (`REFID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    View Code

    3、配置

    package com.uih.servicecenter.common.config;
    
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
    
    import java.sql.Timestamp;
    
    /**
    * @ClassName: MyMetaObjectHandler
    * @Description: 设置数据库字段的字段填充
    * @Author: liang.yan@united-imging.com
    * @date: 2019/9/16
    *
    *
    */
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
    this.setFieldValByName("createDatetime",new Timestamp(System.currentTimeMillis()),metaObject);
    this.setFieldValByName("modifyDatetime",new Timestamp(System.currentTimeMillis()),metaObject);
    this.setFieldValByName("active",1,metaObject);
    this.setFieldValByName("deleted",0,metaObject);
    }
    
    @Override
    public void updateFill(MetaObject metaObject) {
    this.setFieldValByName("modifyDatetime",new Timestamp(System.currentTimeMillis()),metaObject);
    }
    }
    View Code

    雪花算法自动生成主键id

    https://blog.csdn.net/weixin_38657051/article/details/94713695

    概述
    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。

    有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。

    而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。

    结构
    snowflake的结构如下(每部分用-分开):

    0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000

    第一位为未使用,
    接下来的41位为毫秒级时间(41位的长度可以使用69年),
    然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,
    最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)

    一共加起来刚好64位,为一个Long型。(转换成字符串后长度最多19)

    snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。经测试snowflake每秒能够产生26万个ID。

  • 相关阅读:
    寒假作业1
    秋季学习总结
    记叙在人生路上对你影响最大的三位老师
    2019年春季学期第二周作业
    币值转换
    第九周作业
    第八周作业
    第七周作业
    第六周作业
    第五周作业
  • 原文地址:https://www.cnblogs.com/yanliang12138/p/11954176.html
Copyright © 2020-2023  润新知