mybatis plus 主键策略

博主原创,转载请注明出处: 

  mybatis plus 对实体类映射表的主键做了注解支持,该注解为 @TableId ,如果不使用该注解,mybatis plus 默认主键生成的策略是内部封装的雪花算法。

  @TableId 注解定义的代码如下:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface TableId {
    String value() default "";

    IdType type() default IdType.NONE;
}

 

其中 type 为 id 生成的策略类型,其支持的 id 生成策略如下:

public enum IdType {
    AUTO(0),    // 数据库id自增
    NONE(1),     // 未设置主键
    INPUT(2),    // 手动输入
    ID_WORKER(3),     // 只有当插入对象ID 为空,才自动填充,默认的方式,全局唯一id
    UUID(4),      // 只有当插入对象ID 为空,才自动填充,全局唯一id uuid
    ID_WORKER_STR(5);    //只有当插入对象ID 为空,才自动填充,ID_WORKER 字符串表示法

    private final int key;

    private IdType(int key) {
        this.key = key;
    }

    public int getKey() {
        return this.key;
    }
}

 

  项目中可进行 test 测试,项目框架的搭建以及实体类,测试类的封装可以看上一篇文章:

搭建 spring boot + mybatis plus 项目框架并进行调试

  实体类对 id 不添加 @TableId的注解:

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
@Data
@Table(name = "user")
public class User {

    @TableId(type = IdType.AUTO)
    private Long id;

    private String name;

    private int age;

    private String email;
}

测试test为:

    @Test
    void save() {
        User user = new User();
        user.setAge(23);
        user.setEmail("344");
        user.setName("test");
        userService.save(user);
        log.error("------------------{}", JSON.toJSONString(user));
    }

插入数据库的数据如下:

{"age":23,"email":"344","id":1352980660057944066,"name":"test"}

这里生成 id 是有mybatis plus 封装的 IdWorker 的泪生成。

 

 

 如果项目中有需要uuid 也可以直接使用其中的方法进行直接获取。

 

 

2.设置 id 为自增长类型:

  修改数据库表id为主键自增长:

 

 继续使用之前的test进行添加测试:

 打印的添加成功的数据为:

{"age":23,"email":"344","id":1352980660057944067,"name":"test"}

 

 

  

 

posted @ 2021-01-24 16:38  香吧香  阅读(2555)  评论(0编辑  收藏  举报