欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis-plus主鍵id生成、字段自動填充的實現(xiàn)代碼

 更新時間:2020年12月26日 09:56:13   作者:把蘋果v咬哭  
這篇文章主要介紹了mybatis-plus主鍵id生成、字段自動填充的實現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、主鍵id的生成

數(shù)據(jù)庫表里通常都會有一個主鍵id,來作為這條數(shù)據(jù)的唯一標(biāo)識。

常見的方式

1.數(shù)據(jù)庫自動增長
這種很常見了,可以做到全庫唯一。因為id是天然排序的,對于涉及到排序的操作會很方便。

2.UUID
上面的自動增長,雖然簡單,但是對于分表這樣的操作來說就比較麻煩。因為你在第二張插入數(shù)據(jù)的時候,需要拿到上一張表最后一個數(shù)據(jù)的id。
UUID則不同,每次都一個隨機唯一的值,不過因為是隨機,所以也就沒有排序了。

3.redis
redis也可以用來生成id,利用redis的原子操作。好處是可以不依賴數(shù)據(jù)庫,性能好,但是隨之因為redis的引入,帶來了一定的復(fù)雜度。

mybatis-plus的方式

其實在之前使用mp進行新增數(shù)據(jù)的時候,我并沒有進行對應(yīng)的配置,默認(rèn)就會帶有主鍵id。

對其配置也很簡單,在主鍵上加注解,@TableId(type = IdType.ID_WORKER)

@Data
public class User {
  @TableId(type = IdType.ID_WORKER)
  private Long id;
  private String name;
  private Integer age;
  private String email;

  @TableField(fill = FieldFill.INSERT)
  private Date createTime;
  @TableField(fill = FieldFill.INSERT_UPDATE) // 新增的時候update也有值
  private Date updateTime;
}

在idea編輯器里,可以按住ctrl+鼠標(biāo)左擊,看到IdType的幾個枚舉值。

  • AUTO:就是利用數(shù)據(jù)庫自增了
  • NONE:未設(shè)置,需要手動設(shè)置值
  • INPUT: 需要手動設(shè)置值
  • UUID:生成UUID類型的主鍵id
  • ID_WORKER:生成19位的值,數(shù)字類型
  • ID_WORKer_STR:生成19位的值,字符串類型

關(guān)于mp的這個19位值的生成,可以做個了解,利用了snowflake算法。
snowflake是Twitter開源的分布式ID生成算法,結(jié)果是一個long型的ID。
其核心思想是:使用41bit作為毫秒數(shù),10bit作為機器的ID(5個bit是數(shù)據(jù)中心,5個bit的機器ID),
12bit作為毫秒內(nèi)的流水號(意味著每個節(jié)點在每毫秒可以產(chǎn)生 4096 個 ID),最后還有一個符號位,永遠(yuǎn)是0。

二、mp實現(xiàn)自動填充

在操作數(shù)據(jù)庫的時候還有一種常見操作,就是一些字段的填充,比如常見的create_time、update_time等,填充方式都是相同的。
那么除了每次的手動填充,還可以自動填充。而在MP里設(shè)置自動填充只要2步即可:

1.添加注解

@TableField(fill = FieldFill.INSERT)@TableField(fill = FieldFill.INSERT_UPDATE)。

@Data
public class User {
  @TableId(type = IdType.ID_WORKER)
  private Long id;
  private String name;
  private Integer age;
  private String email;

  @TableField(fill = FieldFill.INSERT)    // 新增的時候填充數(shù)據(jù)
  private Date createTime;
  @TableField(fill = FieldFill.INSERT_UPDATE) // 新增或修改的時候填充數(shù)據(jù)
  private Date updateTime;
}

2.自定義實現(xiàn)類 MyMetaObjectHandler

這里需要我們自己寫一個實現(xiàn)類

@Component //此注解表示 將其交給spring去管理
public class MyMetaObjectHandler implements MetaObjectHandler {
  @Override
  public void insertFill(MetaObject metaObject) {
    this.setFieldValByName("createTime", new Date(), metaObject);
    this.setFieldValByName("updateTime", new Date(), metaObject);
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    this.setFieldValByName("updateTime", new Date(), metaObject);
  }
}

對了,要在數(shù)據(jù)庫表里增加對應(yīng)的字段create_time、update_time。添加后可以試一下了,先來新增一條測試數(shù)據(jù):

//  新增
  @Test
  void addUser() {
    User user = new User();
    user.setName("老王");
    user.setAge(66);
    user.setEmail("laowang@123.com");
    userMapper.insert(user);
  }

執(zhí)行成功后查看數(shù)據(jù)庫表:

新增的時候,2個字段都填充了時間。

那現(xiàn)在只做更新操作的時候,只會去更新update_time。

//  修改
  @Test
  void updateUser() {
    User user = new User();
    user.setId(1342322873243996161L);
    user.setName("老王修改后");
    userMapper.updateById(user);

  }

結(jié)果正確。

到此這篇關(guān)于mybatis-plus主鍵id生成、字段自動填充的實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)mybatis-plus主鍵id自動填充內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java重試機制使用RPC必須考慮冪等性原理解析

    java重試機制使用RPC必須考慮冪等性原理解析

    這篇文章主要為大家介紹了java重試機制使用RPC必須考慮冪等性原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • SpringBoot依賴和代碼分開打包的實現(xiàn)步驟

    SpringBoot依賴和代碼分開打包的實現(xiàn)步驟

    本文主要介紹了SpringBoot依賴和代碼分開打包的實現(xiàn)步驟,,這種方法將依賴和代碼分開打包,一般更新只有代碼修改,Pom文件是不會經(jīng)常改動的,感興趣的可以了解一下
    2023-10-10
  • java底層AQS實現(xiàn)類ReentrantLock鎖的構(gòu)成及源碼解析

    java底層AQS實現(xiàn)類ReentrantLock鎖的構(gòu)成及源碼解析

    本章我們就要來學(xué)習(xí)一下第一個?AQS?的實現(xiàn)類:ReentrantLock,看看其底層是如何組合?AQS?,實現(xiàn)了自己的那些功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Slf4j+logback實現(xiàn)JSON格式日志輸出方式

    Slf4j+logback實現(xiàn)JSON格式日志輸出方式

    這篇文章主要介紹了Slf4j+logback實現(xiàn)JSON格式日志輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springboot如何添加task任務(wù)執(zhí)行隊列

    springboot如何添加task任務(wù)執(zhí)行隊列

    這篇文章主要介紹了springboot如何添加task任務(wù)執(zhí)行隊列問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • JavaWeb項目web.xml中出現(xiàn)Element xxx is not allowed here問題

    JavaWeb項目web.xml中出現(xiàn)Element xxx is not al

    這篇文章主要介紹了JavaWeb項目web.xml中出現(xiàn)Element xxx is not allowed here問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Mybatis?如何傳入字符串參數(shù),分割并遍歷

    Mybatis?如何傳入字符串參數(shù),分割并遍歷

    這篇文章主要介紹了Mybatis?如何傳入字符串參數(shù),分割并遍歷,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java版簡單的猜數(shù)字游戲?qū)嵗a

    java版簡單的猜數(shù)字游戲?qū)嵗a

    猜數(shù)字游戲是一款經(jīng)典的游戲,該游戲說簡單也很簡單,說不簡單確實也很難,那么下面這篇文章主要給大家介紹了java版簡單的猜數(shù)字游戲的相關(guān)資料,文中給出了詳細(xì)的實現(xiàn)分析和示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-05-05
  • java詞法分析器DDL遞歸應(yīng)用詳解

    java詞法分析器DDL遞歸應(yīng)用詳解

    這篇文章主要介紹了java詞法分析器DDL遞歸應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 在SpringBoot下讀取自定義properties配置文件的方法

    在SpringBoot下讀取自定義properties配置文件的方法

    這篇文章主要介紹了在SpringBoot下讀取自定義properties配置文件的方法,文中涉及到了Spring-boot中讀取config配置文件的兩種方式,需要的朋友可以參考下
    2017-12-12

最新評論