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"}