MyBatisPlus-ASSIGN_ID、ASSIGN_UUID策略、雪花算法及简化配置

简介: MyBatisPlus-ASSIGN_ID、ASSIGN_UUID策略、雪花算法及简化配置

一、ASSIGN_ID策略

1、设置生成策略为ASSIGN_ID

@Data 
@TableName("tbl_user") 
public class User { 
    @TableId(type = IdType.ASSIGN_ID) 
    private Long id; 
    private String name; 
    @TableField(value="pwd",select=false) 
    private String password; 
    private Integer age; 
    private String tel; 
    @TableField(exist=false) 
    private Integer online; 
}

2、添加数据不设置ID

@SpringBootTest 
class Mybatisplus03DqlApplicationTests { 
    @Autowired 
    private UserDao userDao; 
    @Test 
    void testSave(){ 
        User user = new User(); 
        user.setName("夏志121"); 
        user.setPassword("xiazhi121"); 
        user.setAge(12); user.setTel("40232493522"); 
        userDao.insert(user); 
    } 
}

注意:这种生成策略,不需要手动设置ID,如果手动设置ID,则会使用自己设置的值


3、运行新增方法


生成的ID是一个Long类型的数据

二、ASSIGN_UUID策略

1、设置生成策略为ASSIGN_UUID


使用uuid需要注意是,主键的类型不能是Long,而应该改为String类型

@Data 
@TableName("tbl_user") 
public class User { 
    @TableId(type = IdType.ASSIGN_UUID)
    private String id; 
    private String name; 
    @TableField(value="pwd",select=false) 
    private String password; 
    private Integer age; 
    private String tel; 
    @TableField(exist=false) 
    private Integer online; 
}

2、修改表的主键类型


主键类型设置为varchar,长度要大于32,因为UUID生成的主键为32位,如果长度小的话就会导致插入失败


3、添加数据不设置ID

@SpringBootTest 
class Mybatisplus03DqlApplicationTests { 
    @Autowired 
    private UserDao userDao; 
    @Test 
    void testSave(){ 
        User user = new User(); 
        user.setName("夏志121"); 
        user.setPassword("xiazhi121"); 
        user.setAge(19); 
        user.setTel("412412534343"); 
        userDao.insert(user); 
    } 
}

4、运行新增方法


添加的id是雪花算法得出来的

三、雪花算法

雪花算法(SnowFlake),是Twitter官方给出的算法实现 是用Scala写的。其生成的结果是一个


64bit大小整数,它的结构如下图:

5e341b792c5544259bfa92f9574b8215.png

● 1bit,不用,因为二进制中最高位是符号位,1表示负数,0表示正数。生成的id一般都是用整数,所以最高位固定为0。

● 41bit-时间戳,用来记录时间戳,毫秒级

● 10bit-工作机器id,用来记录工作机器id,其中高位5bit是数据中心ID其取值范围0-31,低位5bit是工作节点ID其取值范围0-31,两个组合起来最多可以容纳1024个节点

● 序列号占用12bit,每个节点每毫秒0开始不断累加,最多可以累加到4095,一共可以产生4096个ID

四、ID生成策略对比及简化配置

ID生成策略对比

● NONE: 不设置id生成策略,MP不自动生成,约等于INPUT,所以这两种方式都需要用户手动设置,但是手动设置第一个问题是容易出现相同的ID造成主键冲突,为了保证主键不冲突就需要做很多判定,实现起来比较复杂

● AUTO:数据库ID自增,这种策略适合在数据库服务器只有1台的情况下使用,不可作为分布式ID使用

● ASSIGN_UUID:可以在分布式的情况下使用,而且能够保证唯一,但是生成的主键是32位的字符串,长度过长占用空间而且还不能排序,查询性能也慢

● ASSIGN_ID:可以在分布式的情况下使用,生成的是Long类型的数字,可以排序性能也高,但是生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键

● 综上所述,每一种主键策略都有自己的优缺点,根据自己项目业务的实际情况来选择使用才是最明智的选择。

简化配置

模型类主键策略配置

如果要在项目中的每一个模型类上都需要使用相同的生成策略,稍微比较繁琐,我们可以在配置文件中添加内容来使用统一的配置:

mybatis-plus: 
    global-config: 
        db-config:
            id-type: assign_id

配置完成之后,每个模型的注解ID策略都将成为assign_id

数据库表与模型关系的映射关系

MP会默认将模型类的类名首字母小写作为表名使用,假如数据库名称都以tbl_开头,那么我们就需要将所有的模型类上添加@TableName,配置起来还是比较繁琐,简化方式可以在配置文件中配置如下内容:

mybatis-plus: 
    global-config: 
        db-config: 
            table-prefix: tbl_

设置前缀的内容,这样MP就会拿tbl_加上模型类的首字母小写,就刚好组装成数据库的表名。

目录
相关文章
|
28天前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
137 26
|
1月前
|
XML Java 数据库连接
MyBatis的常见配置
MyBatis 常见配置包括数据库连接、类型别名、映射器等核心模块,合理配置可提升开发效率与系统性能。主要内容涵盖核心配置文件结构、关键配置项详解及配置优先级说明。
218 4
|
1月前
|
存储 并行计算 算法
【动态多目标优化算法】基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023研究(Matlab代码实现)
【动态多目标优化算法】基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023研究(Matlab代码实现)
|
5月前
|
存储 监控 算法
解析公司屏幕监控软件中 C# 字典算法的数据管理效能与优化策略
数字化办公的时代背景下,企业为维护信息安全并提升管理效能,公司屏幕监控软件的应用日益普及。此软件犹如企业网络的 “数字卫士”,持续记录员工电脑屏幕的操作动态。然而,伴随数据量的持续增长,如何高效管理这些监控数据成为关键议题。C# 中的字典(Dictionary)数据结构,以其独特的键值对存储模式和高效的操作性能,为公司屏幕监控软件的数据管理提供了有力支持。下文将深入探究其原理与应用。
110 4
|
1月前
|
机器学习/深度学习 运维 算法
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
121 0
|
2月前
|
机器学习/深度学习 算法 数据可视化
近端策略优化算法PPO的核心概念和PyTorch实现详解
本文深入解析了近端策略优化(PPO)算法的核心原理,并基于PyTorch框架实现了完整的强化学习训练流程。通过Lunar Lander环境展示了算法的全过程,涵盖环境交互、优势函数计算、策略更新等关键模块。内容理论与实践结合,适合希望掌握PPO算法及其实现的读者。
370 2
近端策略优化算法PPO的核心概念和PyTorch实现详解
|
2月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
207 18
|
1月前
|
运维 算法 安全
基于变异粒子群算法的主动配电网故障恢复策略(Matlab代码实现)
基于变异粒子群算法的主动配电网故障恢复策略(Matlab代码实现)
|
7月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Mybatis-Plus适配崖山配置
【YashanDB知识库】Mybatis-Plus适配崖山配置
|
2月前
|
机器学习/深度学习 算法 安全
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)

热门文章

最新文章