文章目录

  • 前言
  • 一、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, '101@qq.com')

2.新建测试工程


相关代码:
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 {@Autowiredprivate UserMapper userMapper;@Testpublic void testInsert() {System.out.println(("----- insert method test ------"));User user = new User();user.setName("test");user.setAge(13);user.setEmail("101@qq.com");userMapper.insert(user);System.out.println(user.toString());}

执行结果:

User(id=728666272023183375, name=test, age=13, email=101@qq.com)

多次执行,发现主键ID的确呈趋势递增,并且符合雪花算法的规范。

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

三、实现分析

很多人可能疑惑

mybatis-plus雪花算法生成Id使用详解相关推荐

  1. 线上使用雪花算法生成id重复问题

    项目中使用的是hutool工具类库提供的雪花算法生成id方式,版本使用的是5.3.1 <dependency><groupId>cn.hutool</groupId> ...

  2. java 雪花算法生成ID

    一般情况,实现全局唯一ID,有三种方案,分别是通过中间件方式.UUID.雪花算法. 方案一,通过中间件方式,可以是把数据库或者redis缓存作为媒介,从中间件获取ID.这种呢,优点是可以体现全局的递增 ...

  3. 雪花算法生成id重复问题

    为何重复 我们之前精通分布式,没听过SnowFlake?中提到,雪花算法在同一机器同一毫秒级,我们能生成4096个不同序列(12bit序列号情况下),即不同Id,但是如果我们使用的是微服务架构,那不同 ...

  4. 分布式系统中间件(Mogodb、ElasticSearch )雪花算法生成ID

    转载:https://www.cnblogs.com/jakeylove3/p/8446798.html 1.前言 关于如何在系统中生成唯一性ID的问题(如订单号.批次号等),一直困扰了许久.因为还要 ...

  5. php dsa 签名,openssl使用DSA算法生成签名实例详解_PHP教程

    文章给大家介绍基于openssl使用DSA算法生成签名实例,生成签名方法很简单,我们需要懂得中间的原理就比较复杂了,大家一起来看看吧. 命令: openssl> dgst -dss1 -sign ...

  6. windows、Linux两用Snowflake雪花算法生成ID,java工具类实现直接调用即可

    代码实现: public class SnowflakeManagerUtil {private static final long EPOCH_STAMP = 1262275200000L;priv ...

  7. 决策树的生成-ID3算法生成_例题详解

    数据集: 判断特征集是否是空集,进行下一步 选择信息增益最大的那个特征作为根节点,以"有自己的房子"作为限定条件看其他特征 D1(有自己的房子)不确定性为0,以D2(没有自己的房子 ...

  8. Mybatis Plus 入门 简单的CRUD 使用详解 条件查询 分页查询 DML操作 MP代码生成器

    Mybatis Plus入门 MP是 MybatisPlus,简称MP,是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变.MP为简化开发.提高效率而生. 它已经封装好了 ...

  9. DefaultIdentifierGenerator 雪花算法 生成 重复 id 解决办法

    DefaultIdentifierGenerator 雪花算法 生成 重复 id 前言 问题发生 排查原因 问题解决 前言 利用 mybatisplus 的 DefaultIdentifierGene ...

最新文章

  1. php log pecl,PHP日志扩展SeasLog-1.0.0正式版在PECL发布
  2. wuhan2020:武汉新型冠状病毒防疫开源信息收集平台
  3. dynamic change date type to sap.ca.ui.model.type.Date in Debugger
  4. 终端安全 | 全面适配国产系统,打造政企合规终端
  5. bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数
  6. 黑马程序员 Python学习笔记之PyCharm 的初始设置
  7. Altium Designer元件库下载
  8. 网易云ncm,QQ音乐qmc,mgg,mflac,酷狗kgm解锁转换为flac格式
  9. 正则表达式的贪婪匹配和非贪婪匹配
  10. Activiti7.0实战学习(九):查询历史表中的数据
  11. day01 Redis
  12. NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM(方法签名,CallXXXMethod)
  13. Windows下对文件夹下所有图片批量重命名(附C++,python,matlab代码)
  14. 研发过程管理与质量控制
  15. 开源一个IDA小插件:修复VMP dump导入函数
  16. K-means 小麦数据集
  17. 教你去视频网站的开始广告
  18. linux创建目录及其子目录
  19. 项目管理文化:开展有效的总结会议
  20. jar hell问题以及解决方案

热门文章

  1. Cisco Anyconnect 导致 wsl2 网络连接异常问题处理
  2. GhSAD1基因调节棉花的冷应激反应
  3. 一个用 C 语言写的迷你版 2048 游戏,只有 500个字符
  4. ERDAS 9.2安装教程
  5. sketch mac版设置快捷键的小技巧
  6. webuploader 实现图片批量上传
  7. 说中台,以正本清源之名
  8. CodeForces Gym 100989B LCS (B)
  9. NAXX Demo2_WYQ_02
  10. PyCharm采用Docker镜像直接进行Linux环境项目开发