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

相关推荐

  • windows 0x80131500显示网络如何解决

    0x80131500显示网络解决方法 一、 确认已经打开下面TLS的设置: 1、启动“Internet Explorer浏览器”,点击“设置”,打开“Internet 选项”-“高级” 2、勾选“使用 SSL 3.0”、“使用 TLS 1.0”、“使用 TLS 1.1”、“使用 TLS 1.2” 3…

    2022年9月18日
    7500
  • 如何进行授权的APK渗透测试

    作为一个渗透测试小白,本文的目的是希望能为那些和我一样的小白提供一些测试思路。涉及的内容可能比较基础,表哥们见谅。APK 解包拿到 apk 之后直接用 7-Zip 解压可以得到几个文件夹、一个 AndroidManifest.xml 文件、一个dex文件。使用 dex2jar https://sou…

    2022年9月18日
    19800
  • win7如何清理微信和qq缓存

    win7清理微信和qq缓存的方法 微信清理: 1、打开微信,点击左侧下方三条横杠,打开后点击“设置” 2、 点击“通用设置” 3、点击右侧的“存储空间管理” 4、找到缓存这里,点击对应的管理和清理就可以了。 QQ缓存清理: 1、打开QQ主面板,点击左下方三条杠,点击“设置” 2、点击左边的“文件管理…

    2022年9月24日
    8500
  • 如何使用exp进行SQL报错注入

    0x01 前言概述 小编又在MySQL中发现了一个Double型数据溢出。当我们拿到MySQL里的函数时,小编比较感兴趣的是其中的数学函数,它们也应该包含一些数据类型来保存数值。所以小编就跑去测试看哪些函数会出现溢出错误。然后小编发现,当传递一个大于709的值时,函数exp()就会引起一个溢出错误。…

    2022年9月6日
    29900
  • windows浩辰cad看图王可以画图吗

    浩辰cad看图王可以画图吗 答:浩辰cad看图王有简单的画图功能。 1、浩辰cad看图王主要还是用来看图的,无法用它代替autocad来画图。 2、不过其中有一些简单的画图功能。 3、在绘图工具下,可以在图纸中添加直线、文字、圆形、矩形等图形。 4、还可以添加线性、对齐、角度、坐标、直径、半径等数据…

    2022年9月21日
    5000
  • Web Application核心防御机制是什么

    为防止恶意输入,应用程序实施了大量的安全机制,而这些安全机制在概念上都具有相似性。 这些安全机制由以下几个方面组成: 1、处理用户访问web应用程序的数据与功能(防止未授权访问) 2、处理用户对web应用程序功能输入的数据(防止构造恶意数据) 3、应对攻击(处理预料外的报错、自动阻止明显的攻击、自动…

    2022年9月24日
    9100
  • HTML的p标签可不可以不用align

    HTML中的p标签可以不用align属性;因为该属性在“HTML 4.01”中已经被废弃,在HTML5中已经不支持该属性了,可以使用css进行替代该属性,该属性用于规定段落中文本的对齐方式。 本教程操作环境:windows10系统、HTML5版本、Dell G3电脑。 HTML的p标签可以不用ali…

    2022年9月2日
    8700
  • cad文件的后缀有哪些

    cad文件的后缀:1、“.Dwg”,Dwg格式是cad文件的标准文件格式;2、“.dxf”,dxf格式是一种绘图交换文件,是进行CAD数据交换的CAD数据文件格式;3、“.dws”,dws格式的cad文档只能查看不能修改;4、“.dwt”,dwt是CAD的模板文件。 本教程操作环境:windows1…

    2022年9月8日
    34400
  • potplayer播放视频没有声音如何解决

    potplayer播放视频没有声音的详细教程解决方法: 1、打开potplayer安装程序,然后选择【简体中文】,点击【OK】。 2、然后就是点击【下一步】,点击【我接受】。 3、在组件界面中,在【关联】下面,勾选上【关联所有格式】,其它的就随便了,然后点击【下一步】。 4、然后选择好位置以后,点击…

    2022年9月1日
    40300
  • 怎么用vue实现动态路由

    1、什么是动态路由? 动态路由,动态即不是写死的,是可变的。我们可以根据自己不同的需求加载不同的路由,做到不同的实现及页面的渲染。动态的路由存储可分为两种,一种是将路由存储到前端。另一种则是将路由存储到数据库。动态路由的使用一般结合角色权限控制一起使用。 总结: 1)路由可变,不是写死的,动态加载 …

    2022年9月15日
    9900
联系我们
站长微信
站长微信
分享本页
返回顶部