mybatis-plus雪花算法生成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, '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使用详解相关推荐
- 线上使用雪花算法生成id重复问题
项目中使用的是hutool工具类库提供的雪花算法生成id方式,版本使用的是5.3.1 <dependency><groupId>cn.hutool</groupId> ...
- java 雪花算法生成ID
一般情况,实现全局唯一ID,有三种方案,分别是通过中间件方式.UUID.雪花算法. 方案一,通过中间件方式,可以是把数据库或者redis缓存作为媒介,从中间件获取ID.这种呢,优点是可以体现全局的递增 ...
- 雪花算法生成id重复问题
为何重复 我们之前精通分布式,没听过SnowFlake?中提到,雪花算法在同一机器同一毫秒级,我们能生成4096个不同序列(12bit序列号情况下),即不同Id,但是如果我们使用的是微服务架构,那不同 ...
- 分布式系统中间件(Mogodb、ElasticSearch )雪花算法生成ID
转载:https://www.cnblogs.com/jakeylove3/p/8446798.html 1.前言 关于如何在系统中生成唯一性ID的问题(如订单号.批次号等),一直困扰了许久.因为还要 ...
- php dsa 签名,openssl使用DSA算法生成签名实例详解_PHP教程
文章给大家介绍基于openssl使用DSA算法生成签名实例,生成签名方法很简单,我们需要懂得中间的原理就比较复杂了,大家一起来看看吧. 命令: openssl> dgst -dss1 -sign ...
- windows、Linux两用Snowflake雪花算法生成ID,java工具类实现直接调用即可
代码实现: public class SnowflakeManagerUtil {private static final long EPOCH_STAMP = 1262275200000L;priv ...
- 决策树的生成-ID3算法生成_例题详解
数据集: 判断特征集是否是空集,进行下一步 选择信息增益最大的那个特征作为根节点,以"有自己的房子"作为限定条件看其他特征 D1(有自己的房子)不确定性为0,以D2(没有自己的房子 ...
- Mybatis Plus 入门 简单的CRUD 使用详解 条件查询 分页查询 DML操作 MP代码生成器
Mybatis Plus入门 MP是 MybatisPlus,简称MP,是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变.MP为简化开发.提高效率而生. 它已经封装好了 ...
- DefaultIdentifierGenerator 雪花算法 生成 重复 id 解决办法
DefaultIdentifierGenerator 雪花算法 生成 重复 id 前言 问题发生 排查原因 问题解决 前言 利用 mybatisplus 的 DefaultIdentifierGene ...
最新文章
- php log pecl,PHP日志扩展SeasLog-1.0.0正式版在PECL发布
- wuhan2020:武汉新型冠状病毒防疫开源信息收集平台
- dynamic change date type to sap.ca.ui.model.type.Date in Debugger
- 终端安全 | 全面适配国产系统,打造政企合规终端
- bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数
- 黑马程序员 Python学习笔记之PyCharm 的初始设置
- Altium Designer元件库下载
- 网易云ncm,QQ音乐qmc,mgg,mflac,酷狗kgm解锁转换为flac格式
- 正则表达式的贪婪匹配和非贪婪匹配
- Activiti7.0实战学习(九):查询历史表中的数据
- day01 Redis
- NDK学习笔记:JNI调用Java层方法创建Native的AudioTrack播放PCM(方法签名,CallXXXMethod)
- Windows下对文件夹下所有图片批量重命名(附C++,python,matlab代码)
- 研发过程管理与质量控制
- 开源一个IDA小插件:修复VMP dump导入函数
- K-means 小麦数据集
- 教你去视频网站的开始广告
- linux创建目录及其子目录
- 项目管理文化:开展有效的总结会议
- jar hell问题以及解决方案