mybatisPlus-主鍵生成策略


承接:mybatisPlus-插入測試

分布式系統唯一ID生成方案匯總:分布式系統唯一ID生成方案匯總

1 雪花算法

snowflake是Twitter開源的分布式ID生成算法,結果是一個long型的ID。其核心思想是:使用41bit作為毫秒數,10bit作為機器的ID(5個bit是數據中心,5個bit的機器ID),12bit作為毫秒內的流水號(意味着每個節點在每毫秒可以產生 4096 個 ID),最后還有一個符號位,永遠是0。可以保證幾乎全球唯一!

2 主鍵自增測試

在User實體類字段上 加 @TableId(type = IdType.AUTO)注解

src/main/java/com/lv/mybatis_plus/pojo/User.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    //對應數據庫的主鍵(uuid,自增id,雪花算法,redis,zookeeper!)
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

修改數據庫id字段一定要自動遞增

再次運行測試類中的插入方法,然后查看數據庫新增字段

id字段實現了自增

3 手動輸入主鍵測試

修改User實體類的 @TableId(type = IdType.INPUT)注解

src/main/java/com/lv/mybatis_plus/pojo/User.java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    //對應數據庫的主鍵(uuid,自增id,雪花算法,redis,zookeeper!)
    @TableId(type = IdType.INPUT) //一旦手動輸入id之后,就需要自己寫id了
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

此時運行插入測試方法,查看控制台日志

可以看出id為null,我們沒有給id傳值,此時查看一下數據庫

因為我們給數據庫中的主鍵設置自動遞增了,所有數據還是插入進去了,那么接下來我們修改一個測試類,給id傳入一個值再測試一次

src/test/java/com/lv/mybatis_plus/MybatisPlusApplicationTests.java

//測試插入
@Test
public void testInsert(){
    User user = new User();
    user.setId(9527L);//傳入一個Long類型的id
    user.setName("星露谷");
    user.setAge(8);
    user.setEmail("1148397597@qq.com");
    int result = userMapper.insert(user); // mybatis-plus會幫我們自動生成id
    System.out.println(result); //受影響的行數
    System.out.println(user); //發現,id會自動回填
}

運行插入方法,查看控制台和數據庫

數據插入成功

4 所有主鍵生成策略

只需要修改實體類上@TableId(type = ???)注解 中的type值即可,默認 ID_WORKER 全局唯一的id

    AUTO(0), //數據庫id自增
    NONE(1), //未設置主鍵
    INPUT(2), //手動輸入
    ID_WORKER(3), //默認的全局唯一id
    UUID(4), //全局唯一uuid
    ID_WORKER_STR(5); //ID_WORKER 的字符串表示法

 其它策略這里就不再測試了


免責聲明!

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



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