最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、主鍵id的生成

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

常見的方式

1.數(shù)據(jù)庫自動(dòng)增長(zhǎng)
這種很常見了,可以做到全庫唯一。因?yàn)閕d是天然排序的,對(duì)于涉及到排序的操作會(huì)很方便。

2.UUID
上面的自動(dòng)增長(zhǎng),雖然簡(jiǎn)單,但是對(duì)于分表這樣的操作來說就比較麻煩。因?yàn)槟阍诘诙埐迦霐?shù)據(jù)的時(shí)候,需要拿到上一張表最后一個(gè)數(shù)據(jù)的id。
UUID則不同,每次都一個(gè)隨機(jī)唯一的值,不過因?yàn)槭请S機(jī),所以也就沒有排序了。

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

mybatis-plus的方式

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

對(duì)其配置也很簡(jiǎn)單,在主鍵上加注解,@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) // 新增的時(shí)候update也有值
  private Date updateTime;
}

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

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

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

二、mp實(shí)現(xiàn)自動(dòng)填充

在操作數(shù)據(jù)庫的時(shí)候還有一種常見操作,就是一些字段的填充,比如常見的create_time、update_time等,填充方式都是相同的。
那么除了每次的手動(dòng)填充,還可以自動(dòng)填充。而在MP里設(shè)置自動(dòng)填充只要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í)候填充數(shù)據(jù)
  private Date createTime;
  @TableField(fill = FieldFill.INSERT_UPDATE) // 新增或修改的時(shí)候填充數(shù)據(jù)
  private Date updateTime;
}

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

這里需要我們自己寫一個(gè)實(shí)現(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);
  }
}

對(duì)了,要在數(shù)據(jù)庫表里增加對(duì)應(yīng)的字段create_time、update_time。添加后可以試一下了,先來新增一條測(cè)試數(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ù)庫表:

新增的時(shí)候,2個(gè)字段都填充了時(shí)間。

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

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

  }

結(jié)果正確。

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

相關(guān)文章

  • Spring事務(wù)管理方法步驟解析

    Spring事務(wù)管理方法步驟解析

    這篇文章主要介紹了Spring事務(wù)管理方法步驟解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 基于spring security實(shí)現(xiàn)登錄注銷功能過程解析

    基于spring security實(shí)現(xiàn)登錄注銷功能過程解析

    這篇文章主要介紹了基于spring security實(shí)現(xiàn)登錄注銷功能過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • MyBatis如何進(jìn)行雙重foreach循環(huán)

    MyBatis如何進(jìn)行雙重foreach循環(huán)

    這篇文章主要介紹了MyBatis如何進(jìn)行雙重foreach循環(huán),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java數(shù)組判斷是否越界的示例代碼

    Java數(shù)組判斷是否越界的示例代碼

    在Java編程中,避免數(shù)組越界是十分重要的,本文介紹了兩種常見的判斷數(shù)組是否越界的方法:一是通過數(shù)組的length屬性來判斷索引是否合法;二是通過捕獲ArrayIndexOutOfBoundsException異常來處理越界問題,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Java LinkedList集合功能實(shí)例解析

    Java LinkedList集合功能實(shí)例解析

    這篇文章主要介紹了Java LinkedList集合功能實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java中Javers?比較兩個(gè)類的差異

    java中Javers?比較兩個(gè)類的差異

    本文主要介紹了Javers?比較兩個(gè)類的差異,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 解析SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù)的問題

    解析SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù)的問題

    Minio是Apache?License?v2.0下發(fā)布的對(duì)象存儲(chǔ)服務(wù)器,使用MinIO構(gòu)建用于機(jī)器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工作負(fù)載的高性能基礎(chǔ)架構(gòu)。這篇文章主要介紹了SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù),需要的朋友可以參考下
    2022-03-03
  • mybatis參數(shù)String與Integer類型的判斷方式

    mybatis參數(shù)String與Integer類型的判斷方式

    這篇文章主要介紹了mybatis參數(shù)String與Integer類型的判斷方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 淺談Java中ThreadLocal內(nèi)存泄露的原因及處理方式

    淺談Java中ThreadLocal內(nèi)存泄露的原因及處理方式

    內(nèi)存泄漏就是我們申請(qǐng)了內(nèi)存,但是該內(nèi)存一直無法釋放,就會(huì)導(dǎo)致內(nèi)存溢出問題,本文詳細(xì)的介紹了ThreadLocal內(nèi)存泄露的原因及處理方式,感興趣的可以了解一下
    2023-05-05
  • SpringBoot實(shí)現(xiàn)PDF添加水印的三種方法

    SpringBoot實(shí)現(xiàn)PDF添加水印的三種方法

    本文主要介紹了SpringBoot實(shí)現(xiàn)PDF添加水印的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論

永仁县| 南岸区| 正安县| 新巴尔虎左旗| 石狮市| 山西省| 曲阳县| 冷水江市| 清远市| 金溪县| 凌海市| 高州市| 凌海市| 高州市| 保山市| 盖州市| 闽清县| 屏山县| 海城市| 响水县| 文昌市| 洛浦县| 绥芬河市| 沂南县| 阿合奇县| 汾阳市| 奇台县| 灵石县| 东海县| 沅江市| 临安市| 长子县| 西青区| 德格县| 大渡口区| 溆浦县| 佳木斯市| 双桥区| 贡山| 从化市| 松江区|