长生的梦呓


  • 归档
  • 算法
  • 基础
  • 关于

  • 分类
  • 日志
  • Servlet
  • Archive
  • 数据结构
  • IO 流

  • 标签
  • 友链
  • MyBatis
  • About
  • Spring 5
  • Java SE
  • Java EE
  • Algorithms
  • 新特性
  • 位运算技巧

  • 搜索
内网穿透 项目实战 数据库 MySQL 安卓踩坑 开发工具 设计模式 Enum 枚举 Linux MyBatis-plus JSON IDEA Transactions AOP IO 流 DP IoC 与 DI 位运算技巧 工具类 学习技巧 Git JDK 排序 Spring Boot Spring MVC Spring Framework MyBatis Log4J Regex Jsoup JDBC 数据结构 递推 递归 算法 Servlet与JSP 小难 中等 简单

【MyBatis-Plus】(2)主键生成策略

发表于 2020-04-24 | 2 | 阅读次数 533

前言

该片文章紧接着上一篇文章。现在实现一个插入,并且扩展一下不同的主键生成策略。

一、主键生成策略

1.测试插入

新建一个测试方法,用于测试插入。

这里我们并没有给用户输入id(主键)。

    @Test
    public void testInsert() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        user.setEmail("123456@qq.com");

        int insert = userMapper.insert(user);
        System.out.println(user);
    }

输出:

我们可以看到,我们并没有给他指定id,但是mybatis-plus给我们默认生成了一个id。

User(id=1253591398346522625, name=张三, age=20, email=123456@qq.com)

2.探究生成的id

id的生成有好几种方式。我们最常用的时数据自增长序列或字段。推荐阅读这篇文章:分布式系统唯一ID生成方案汇总

  1. 数据库自增长序列或字段
  2. UUID
  3. Redis生成ID
  4. Twitter的snowflake算法(雪花算法)
  5. 利用zookeeper生成唯一ID

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。

上面插入语句中的id,使用的就是“雪花算法”(mybatis-plus默认使用这个)。

二、自定义主键id生成策略

注意:先去上一篇文章创建的user表中,将id字段设为自增。否则会报如下异常:“Field 'id' doesn't have a default value”。

修改实体类:在id字段上,增加一个注解@TableId(type = IdType.AUTO)(该注解代表id生成策略为自增)。更多的主键生成策略参考:主键注解 @TableId

@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

重新运行刚刚创建的插入测试类:

    @Test
    public void testInsert() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        user.setEmail("123456@qq.com");

        int insert = userMapper.insert(user);
        System.out.println(user);
    }

然后查询user表中所有数据:

    @Test
    public void testSelect() {
        List<User> userList = userMapper.selectList(null);
        userList.forEach(System.out::println);
    }

输出:
可以看出在,第一次运行插入时,id使用的是“雪花算法”,id值为“1253591398346522625”。第二次我修改的id的生成策略,修改为自增,此时id值由上一次自增,插入的数据id为“1253591398346522626”。

User(id=1253591398346522625, name=张三, age=20, email=123456@qq.com)
User(id=1253591398346522626, name=张三, age=20, email=123456@qq.com)

备注:还可以使用别的主键生成策略,详情看官方文档 IdType。

  • 本文作者: 长生的梦呓
  • 本文链接: https://shengjava.com/archives/mybatis-plus2主键生成策略
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 内网穿透 # 项目实战 # 数据库 # MySQL # 安卓踩坑 # 开发工具 # 设计模式 # Enum # 枚举 # Linux # MyBatis-plus # JSON # IDEA # Transactions # AOP # IO 流 # DP # IoC 与 DI # 位运算技巧 # 工具类 # 学习技巧 # Git # JDK # 排序 # Spring Boot # Spring MVC # Spring Framework # MyBatis # Log4J # Regex # Jsoup # JDBC # 数据结构 # 递推 # 递归 # 算法 # Servlet与JSP # 小难 # 中等 # 简单
【MyBatis-Plus】(1)快速开始
【MyBatis-Plus】(3)自动填充
  • 文章目录
  • 站点概览
长生的梦呓

长生的梦呓

110 日志
39 分类
40 标签
RSS
E-mail CSDN
Creative Commons
Links
  • CSDN 地址
  • waltz26
  • Ryan Wang's Blog
  • JohnNiang's Blog
  • 廖雪峰
  • 菜鸟教程
© 2021 长生的梦呓
浙ICP备20005262号-1