博主原創,轉載請注明出處:
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"}