mybatisplus雪花算法生成Id怎么使用

雪花算法实战

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')

mybatisplus雪花算法生成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:

@Datapublic 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配置方法:

@Mapperpublic 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=8080logging.level.com.laowan.mybatis_plus.mapper=debugspring.datasource.url = jdbc:mysql://localst:3306/seckill?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=truespring.datasource.username = rootspring.datasource.password = 123456

3.测试

@SpringBootTestclass 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());    }

执行结果:

mybatisplus雪花算法生成Id怎么使用

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

多次执行,发现主键ID的确呈趋势递增。

mybatisplus雪花算法生成Id怎么使用

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

实现分析

很多人可能疑惑????,你这明明啥都没干,怎么就实现了雪花算法生成Id。
其实mybatis-plus已经内置雪花算法生成分布式少数id。
在mybatis-plus特性中已经明确说明了这点。

mybatisplus雪花算法生成Id怎么使用

我们可以直接在IDEA中双击shift搜索Sequence类查看其具体实现,可以发现其实现就是采用了雪花算法。

mybatisplus雪花算法生成Id怎么使用

为什么默认就是雪花算法

实体User:

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

这里可以看到我们并没有在实体类的id上设置id生成策略。
其实mybatis-plus中默认的主键生成策略为DefaultIdentifierGenerator,里面的实现就是采用Sequence生成主键。

mybatisplus雪花算法生成Id怎么使用

public class DefaultIdentifierGenerator implements IdentifierGenerator {    private final Sequence sequence;    public DefaultIdentifierGenerator() {        this.sequence = new Sequence((InetAddress)null);    }    public DefaultIdentifierGenerator(InetAddress inetAddress) {        this.sequence = new Sequence(inetAddress);    }    public DefaultIdentifierGenerator(long workerId, long dataCenterId) {        this.sequence = new Sequence(workerId, dataCenterId);    }    public DefaultIdentifierGenerator(Sequence sequence) {        this.sequence = sequence;    }    public Long nextId(Object entity) {        return this.sequence.nextId();    }}

主动设置Id生成策略

可以通过mybatis-plus中的@TableId主键,主动标识主键字段,并配置主键生成策略。

@Datapublic class User {    //采用IdentifierGenerator默认的实现类DefaultIdentifierGenerator生成id    @TableId(type = IdType.ASSIGN_ID)    private Long id;    private String name;    private Integer age;    private String email;}

mybatisplus雪花算法生成Id怎么使用

感谢各位的阅读,以上就是“mybatisplus雪花算法生成Id怎么使用”的内容了,经过本文的学习后,相信大家对mybatisplus雪花算法生成Id怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

文章标题:mybatisplus雪花算法生成Id怎么使用,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/27602

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云
上一篇 2022年9月21日 上午12:04
下一篇 2022年9月21日 上午12:05

相关推荐

  • 企业费用管理神器:9款费控系统精选

    本文介绍了9款费控系统:合思、金蝶云之家、明道云、管家婆、用友U8、AIrbase、Yokoy、SAP Concur、Expensify。 在企业管理中,传统的费用控制不仅费时费力,还容易出错,最终影响企业的财务健康和运营效率,而费控系统是一种有效的解决方案,可以优化费用管理流程,提升整体工作效率。…

    2024年7月23日
    900
  • 数据库权限关系图表是什么

    数据库权限关系图表是一种以图表形式展示数据库权限分配和管理的工具。它可以有效地帮助我们理解和管理数据库中的各种权限关系。数据库权限关系图表主要包含以下几个部分:数据对象、用户(或用户组)、权限类型、权限级别、权限状态等。其中,数据对象是权限关系图表中的核心元素,它代表了数据库中的各种数据资源,如表、…

    2024年7月22日
    100
  • 诚信数据库是什么意思

    诚信数据库是一种收集、存储和管理个人或组织诚信信息的系统。它是一种用于评估和管理个人或组织行为的工具,通常由政府、商业组织或者非营利组织进行运营。诚信数据库的主要功能包括:1、评估个人或组织的诚信状况;2、提供决策支持;3、预防和控制风险;4、促进社会信用体系建设。 在这四大功能中,评估个人或组织的…

    2024年7月22日
    000
  • 数据库期末关系代数是什么

    关系代数是一种对关系进行操作的代数系统,是关系模型的数学基础,主要用于从关系数据库中检索数据。其操作包括选择、投影、并集、差集、笛卡尔积、连接、除法等。其中,选择操作是对关系中的元组进行筛选,只保留满足某一条件的元组;投影操作则是从关系中选择出一部分属性构造一个新的关系。 一、选择操作 选择操作是关…

    2024年7月22日
    500
  • mysql建立数据库用什么命令

    在MySQL中,我们使用"CREATE DATABASE"命令来创建数据库。这是一个非常简单且基础的命令,其语法为:CREATE DATABASE 数据库名。在这个命令中,“CREATE DATABASE”是固定的,而“数据库名”则是你要创建的数据库的名称,可以自己设定。例如,如…

    2024年7月22日
    100
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部