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

本文主要介绍了mybatis-plus雪花算法生成Id使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

在实际开发过程中,数据库自增主键生成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') 

相关代码:
maven依赖:

   org.springframework.bootspring-boot-starter-web com.baomidoumybatis-plus-boot-starter3.5.2 mysqlmysql-connector-javaruntime org.projectlomboklomboktrue org.springframework.bootspring-boot-starter-testtest

实体User:

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

mapper:

public interface UserMapper extends BaseMapper { } 

启动类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 { } 

两者任意选择一种方式配置即可,如果都不配置,那么在执行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("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使用详解的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java