0
点赞
收藏
分享

微信扫一扫

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 的泪生成。

 

mybatis plus 主键策略_主键

 

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

 

 

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

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

mybatis plus 主键策略_实体类_02

 

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

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

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

 

 

  

 



举报

相关推荐

0 条评论