首页 > 编程语言 >mybatis-plus雪花算法生成Id使用详解

mybatis-plus雪花算法生成Id使用详解

时间:2022-12-07 17:38:14浏览次数:61  
标签:private Id 算法 plus mybatis 主键 id


文章目录

  • ​​前言​​
  • ​​一、mybatis-plus官网​​
  • ​​二、雪花算法实战​​
  • ​​1.建表​​
  • ​​2.新建测试工程​​
  • ​​3.单元测试​​
  • ​​三、实现分析​​
  • ​​四、为什么默认就是雪花算法​​
  • ​​五、主动设置Id生成策略​​
  • ​​六、内置的雪花算法工具类:IdWorker​​
  • ​​总结​​

前言

在实际开发过程中,数据库自增主键生成Id能满足大部分的场景。
但是随着分布式应用场景的增多,表数据的增大导致分表分库的大量应用。
数据库自增主键的生成规则无法满足对应的业务场景,于是诞生了越来越多的分布式ID生成算法,其中雪花算法是目前最为流行的。
今天说一下在mybatis-plus中如何使用雪花算法生成Id。


一、mybatis-plus官网

官方文档:​​https://baomidou.com/​

Git地址:​​https://github.com/baomidou/mybatis-plus​

TIP⚠️:
推荐学习框架的使用的时候,都多研究下官网,获取第一手资料。

二、雪花算法实战

1.建表

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);

注意⚠️:
这里的主键字段没有配置自增生成策略,所以执行新增操作的时候,需要给id字段设置值,才能新增成功。类似如下:

INSERT INTO user ( id, name, age, email ) VALUES ( 123434, 'test', 13, '[email protected]')

2.新建测试工程

mybatis-plus雪花算法生成Id使用详解_雪花算法


相关代码:

maven依赖:

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

实体User:

@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}

mapper:

public interface UserMapper extends BaseMapper<User> {

}

启动类Application:

@SpringBootApplication
@Slf4j
@MapperScan("com.laowan.mybatis_plus.mapper")
public class MybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusApplication.class, args);
log.info("mybatis_plus_demo 启动成功");
}
}

注意⚠️:
这里在启动类上配置了@MapperScan(“mapper接口目录”),所以在UserMapper接口上没有添加@Mapper注解。

@Mapper配置方法:

@Mapper
public interface UserMapper extends BaseMapper<User> {

}

两者任意选择一种方式配置即可,如果都不配置,那么在执行dao层方法进行数据操作时,会出现在spring容器中找不到对应的bean的异常。

@Mapper和@MapperScan都不配置调用mapper方法时出现的异常:
​​​Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.laowan.mybatis_plus.mapper.UserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}​

配置属性:

server.port=8080
logging.level.com.laowan.mybatis_plus.mapper=debug
spring.datasource.url = jdbc:mysql://localst:3306/seckill?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.datasource.username = root
spring.datasource.password = 123456

3.单元测试

@SpringBootTest
class MybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;

@Test
public void testInsert() {
System.out.println(("----- insert method test ------"));
User user = new User();
user.setName("test");
user.setAge(13);
user.setEmail("[email protected]");
userMapper.insert(user);
System.out.println(user.toString());
}

执行结果:

mybatis-plus雪花算法生成Id使用详解_mybatis-plus_02


User(id=728666272023183375, name=test, age=13, [email protected])多次执行,发现主键ID的确呈趋势递增,并且符合雪花算法的规范。

mybatis-plus雪花算法生成Id使用详解_主键_03


结论:

主键id的生成策略已经采用了雪花算法,呈趋势递增。

三、实现分析

很多人可能疑惑

标签:private,Id,算法,plus,mybatis,主键,id
From: https://blog.51cto.com/u_15905482/5919831

相关文章

  • Mybatis-Plus字段策略FieldStrategy详解
    文章目录​​前言​​​​一、官方文档​​​​二、字段策略介绍​​​​1、FieldStrategy作用​​​​2、FieldStrategy类型​​​​3、FieldStrategy配置​​​​全局策略......
  • Mybatis-Plus通过SQL注入器实现真正的批量插入
    文章目录​​前言​​​​一、mysql批量插入的支持​​​​二、Mybatis-Plus默认saveBatch方法解析​​​​1、测试工程建立​​​​2、默认批量插入saveBatch方法测试​​......
  • mybatis-plus雪花算法增强:idworker
    文章目录​​前言​​​​一、官网​​​​二、默认实现的弊端​​​​三、mybatis-plus中datacenterId和workerId的默认生成规则​​​​四、idworker介绍​​​​五、idwo......
  • Mybatis-Plus中updateById方法不能更新空值问题
    问题描述在Mybatis-Plus中调用updateById方法进行数据更新默认情况下是不能更新空值字段的。而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况。那么如果让Mybat......
  • mybatis-plus异常记录:org.apache.ibatis.binding.BindingException Invalid bound st
    问题描述我们在使用mybatis或mybatis-plus作为持久化框架的时候,通过dao层接口调用xml中配置好的sql时,常常会遇到​​org.apache.ibatis.binding.BindingExceptionInvalidb......
  • Mysql GTID
    GTID的全称是GlobalTransactionIdentifier,也就是全局事务ID,是一个事务在提交的时候生成的,是这个事务的唯一标识。它由两部分组成,格式是:GTID=server_uuid:gno等价于,......
  • SOLIDWORKS 2023新功能 SW材料明细表功能升级
    今天微辰三维和大家分享SOLIDWORKS2023工程图的亮点新功能之一:材料明细表的覆盖。材料明细表的覆盖SOLIDWORKS工程图是我们常用的功能之一。当采用断开链接模式修改材料明......
  • 将jquery validate校验框架的remote异步验证设置为同步校验
        最近公司的项目中都是使用的jqueryvalidate在做表单,感觉确实非常好用,很灵活,用起来很顺手。但也遇到了不少问题。在此记录一下。    问题:当提交表单触......
  • FinClip产品更新:FIDE 插件开发功能优化;开发者文档英文版上线
    不知不觉22年进入尾声,通过一年的不断打磨,FinClip也在不断成长,现在,让我们看看过去的11月,FinClip又有了哪些新的变化。产品方面的相关动向......
  • provide与inject (依赖注入)
    provide与inject作用:实现祖孙组件间的通信实例:父组件<scriptsetupname="Parent">importChildfrom'./components/Child.vue'import{reactive,provide}fr......