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

相关推荐

  • 如何进行DLL代理转发与weiquan分析

    DLL劫持 再Windows 7 版本之后,系统采用了KnowDLLs对DLL进行管理,其位于注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs下,在这个下面的DLL文件会被禁止从exe自身所在的目录…

    2022年9月22日
    81300
  • Burpsuit结合SQLMapAPI产生的批量注入插件是怎样的

    1.1变动: 增加过滤设置 优化显示结果 增加运行提示信息 增加域名正则匹配 整个插件分为三个面板:任务面板、sqlmapapi参数配置面板、过滤条件面板。 任务面板 Server : SQLmapapi服务的IP和端口 THREAD:同时检测的任务数量 Domain:需要检测的域名,支持正则匹配 …

    2022年9月20日
    61600
  • thumb文件夹可以删除吗

    thumb指的是系统隐藏缓存文件,可以删除;thumb文件是系统为例提高文件夹在缩略图查看方式下的响应速度而对当前文件夹下的图像文件建立的缓存,可以方便用户对图片进行预览,删除或者禁用都不会对系统造成影响。 本教程操作环境:windows10系统、DELL G3电脑。 thumb是什么文件夹?可以删…

    2022年9月18日
    1.9K00
  • MySQL数据库JDBC编程知识点有哪些

    1.JDBC前置工作 1.1准备好MySQL驱动包 MySQL的jdbc驱动包我们可以去官网下载,我们也可以maven中央仓库下载,这个maven中央仓库是什么呢?你可以理解为我们手机中的“应用商店”软件,它的作用和应用商店的作用是差不多的,只不过手机应用商店里面是手机软件,而maven中央仓库里面…

    2022年9月15日
    61900
  • MyBatis3源码解析之怎么获取数据源

    jdbc 再贴一个JDBC运行的测试方法,流程为: 加载JDBC驱动; 获取数据库连接; 创建JDBC Statements对象; 设置SQL语句的传入参数; 执行SQL语句并获得查询结果; 对查询结果进行转换处理并将处理结果返回; 释放相关资源(关闭Connection,关闭Statement,关…

    2022年9月19日
    63800
  • MySQL基于GTID主从搭建怎么实现

    一、用xtarbackup备份数据库 1.1 优势 使用xtarbackup来做主从的前期准备是因为xtarbackup备份数据和恢复数据都很快,特别适合数据量很大的数据库备份,而且它的安装非常的简单,使用也很简单….(巴拉巴拉,废话编不出来了)。 1.2 安装 具体版本根据自己的具体情…

    2022年8月27日
    43700
  • QT如何实现将两个时间相加

    标志位 首先介绍实现的这两个函数:void setTreatmentEndtime();//系统时间+我设定的时间=总的需要时间void setRinseTimeStartAndEnd(QString Val);//将分钟转换为标准时分格式,在相加 需要设置的标志位: //mainwindow.hp…

    2022年9月6日
    60800
  • 网络安全审计工具Nmap如何使用

    一.软件下载 https://nmap.org/download.html 二.扫描IP nmap 192.168.1.10 #扫描单IP nmap 192.168.1.10-100 #扫描IP段 nmap 192.168.1.10 192.168.1.11 #扫描单独的多IP nmap 192.1…

    2022年9月2日
    41100
  • windows浩辰cad看图王卸载不了怎么解决

    解决方法: 方法一: 1、首先我们要退出软件,然后右键任务栏空白处,打开“任务管理器” 2、在后台进程中找到所有cad相关进程。 3、选中这些进程,点击右下角的“结束任务” 4、结束完成后,我们打开系统设置中的“应用” 5、最后在其中找到浩辰cad看图王,将它卸载就可以了。 方法二: 1、另外我们也…

    2022年9月21日
    1.1K00
  • PHP面向对象设计的五个基准原则是什么

    S.O.L.I.D 是 面向对象设计(OOD)的 5 个准则的首字母缩写 ,这些准则是由 Robert C. Martin 提出的, 他更为人所熟知的名字是 Uncle Bob。 这些准则使得开发出易扩展、可维护的软件变得更容易。也使得代码更精简、易于重构。同样也是敏捷开发和自适应软件开发的一部分。…

    2022年9月8日
    39400
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部