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_加上模型类的首字母小写,就刚好组装成数据库的表名。

目录
相关文章
|
3月前
|
SQL XML Java
mybatis复习01,简单配置让mybatis跑起来
文章介绍了MyBatis的基本概念、历史和特点,并详细指导了如何配置MyBatis环境,包括创建Maven项目、添加依赖、编写核心配置文件、创建数据表和实体类、编写Mapper接口和XML配置文件,以及如何编写工具类和测试用例。
mybatis复习01,简单配置让mybatis跑起来
|
2月前
|
数据采集 缓存 算法
算法优化的常见策略有哪些
【10月更文挑战第20天】算法优化的常见策略有哪些
|
3月前
|
前端开发 JavaScript Java
技术分享:使用Spring Boot3.3与MyBatis-Plus联合实现多层次树结构的异步加载策略
在现代Web开发中,处理多层次树形结构数据是一项常见且重要的任务。这些结构广泛应用于分类管理、组织结构、权限管理等场景。为了提升用户体验和系统性能,采用异步加载策略来动态加载树形结构的各个层级变得尤为重要。本文将详细介绍如何使用Spring Boot3.3与MyBatis-Plus联合实现这一功能。
125 2
|
4月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
53 1
|
4月前
|
缓存 算法 前端开发
深入理解缓存淘汰策略:LRU和LFU算法的解析与应用
【8月更文挑战第25天】在计算机科学领域,高效管理资源对于提升系统性能至关重要。内存缓存作为一种加速数据读取的有效方法,其管理策略直接影响整体性能。本文重点介绍两种常用的缓存淘汰算法:LRU(最近最少使用)和LFU(最不经常使用)。LRU算法依据数据最近是否被访问来进行淘汰决策;而LFU算法则根据数据的访问频率做出判断。这两种算法各有特点,适用于不同的应用场景。通过深入分析这两种算法的原理、实现方式及适用场景,本文旨在帮助开发者更好地理解缓存管理机制,从而在实际应用中作出更合理的选择,有效提升系统性能和用户体验。
199 1
|
4月前
|
DataWorks 算法 调度
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
44 1
|
4月前
|
算法 语音技术
支付宝商业化广告算法问题之在ODL模型优化过程中,采取什么策略来提高模型的泛化能力呢
支付宝商业化广告算法问题之在ODL模型优化过程中,采取什么策略来提高模型的泛化能力呢
|
4月前
|
缓存 Java 数据库连接
mybatis1.常见配置
本文介绍了MyBatis框架中的常见配置及其加载顺序。配置可通过`properties`元素、资源文件或方法参数传递,其中方法参数传递的属性具有最高优先级。文章列举了几个重要的配置项,如`cacheEnabled`用于全局开启或关闭缓存功能;`lazyLoadingEnabled`控制对象的延迟加载行为;`useGeneratedKeys`允许JDBC支持自动生成主键;`defaultExecutorType`设定默认执行器类型等。此外,还介绍了多环境配置方法,通过`environments`元素可定义不同环境下的数据库连接信息,并可根据需求动态选择加载特定环境
|
5月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
96 3