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

相关推荐

  • 如何进行基于知识图谱的APT组织追踪治理

    高级持续性威胁(APT)正日益成为针对政府和企业重要资产的不可忽视的网络空间重大威胁。由于APT攻击往往具有明确的攻击意图,并且其攻击手段具备极高的隐蔽性和潜伏性,传统的网络检测手段通常无法有效对其进行检测。近年来,APT攻击的检测和防御技术逐渐引起各国政府和网络安全研究者的关注。 一、发达国家AP…

    2022年9月18日
    85400
  • 如何进行Apache HTTP组件提权漏洞利用过程深度分析

    Apache HTTP 被发现存在本地提权漏洞(CVE-2019-0211),漏洞作者在名列前茅时间就给出了WriteUp和漏洞EXP,阿尔法实验室也对EXP进行了深入分析,在此将分析的笔记整理分享出来,希望对大家理解该漏洞有所帮助。下面内容主要按着EXP的执行步骤一步步讲解,同时详细解释了利用过程…

    2022年9月15日
    79000
  • mysql如何查询最大id值

    在mysql中,可以使用SELECT语句配合max()函数来查询最大id值,语法为“SELECT MAX(id) FROM 表名;”。SELECT语句用于查询指定表中数据,而max()函数用于返回查询结果集中指定列中的最大值,语法“MAX(列名)”;而想要获取id列的最大值,max()函数中的参数值…

    2022年9月21日
    3.0K00
  • 如何用JAVA语言分析双重检查锁定

    1、双重检查锁定 在程序开发中,有时需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化,此时可以采用双重检查锁定来延迟对象初始化操作。双重检查锁定是设计用来减少并发系统中竞争和同步开销的一种软件设计模式,在普通单例模式的基础上,先判断对象是否已经被初始化,再决定要不要加锁。尽管…

    2022年9月20日
    65100
  • jquery如何监听select的改变

    监听步骤:1、利用change()给select元素绑定改变事件,并设置事件处理函数,语法“$(“select”).change(function() {…});”;2、在事件处理函数中,设置事件触发后需要执行的代码,语法“alert(“选项已被改变&…

    2022年9月13日
    4.0K00
  • C语言源码二次释放的危害是什么

    1、二次释放 二次释放简单理解就是对同一个指针指向的内存释放了两次,针对C语言源代码,对同一个指针进行两次 free() 操作,可能导致二次释放,本文3.1章节的缺陷代码就是对这类情况的描述。在C++语言中,浅拷贝操作不当是导致二次释放常见原因之一。如:调用一次赋值运算符或拷贝构造函数将会导致两个对…

    2022年9月19日
    74900
  • easyrecovery如何恢复回收站数据

    easyrecovery恢复回收站数据的方法 1、进入软件之后,选择你要恢复的数据类型,点击下一步。 2、进入从恢复的界面后,点击“选择位置”,在弹出的文件夹空白处点击鼠标右键, 选择其中的“显示隐藏文件” 3、选择弹出的“Recycle”文件夹,点击扫描。 4、数据扫描完成后,可以点击左侧的“文件…

    2022年9月26日
    53100
  • ppt中分数如何打出来

    分数打出来ppt方法: 方法一: 名列前茅步,先在想要输入分数的地方“插入”一个“文本框” 第二步,在其中输入数字,再按下回车,然后按下“shift+——”键 第三步,输入完成再按回车并输入数字就能形成一个分数了。 方法二: 名列前茅步,点击“插入”下的“公式”按钮。 第二步,点击第二行第二列的按钮…

    2022年8月29日
    2.7K00
  • windows中该内存不能为written如何解决

    该内存不能为written解决方法 一、如果能排除硬件上的原因(内存条不兼容,更换内存。显卡驱动是否正确按装或者是否被恶意覆盖否?)往下看: 二、系统或其它软件引起的,可用下述方法处理: 1.系统本身有问题,及时安装官方发行的补丁,必要时重装系统。 2.病毒问题:杀毒。 3.杀毒软件与其它软件冲突:…

    2022年9月2日
    1.1K00
  • windows谷歌浏览器开发者模式如何打开

    谷歌浏览器开发者模式打开方法: 1、点击右上角的图标先。 2、随后选择更多工具中的“开发者工具”。 3、随后即可进入“开发者模式”。 4、点击上方的选项可以设置开发者工具的位置。 关于“windows谷歌浏览器开发者模式如何打开”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“windows…

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

400-800-1024

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

分享本页
返回顶部