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

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM