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

Mybatis plus的自動(dòng)填充與樂(lè)觀鎖的實(shí)例詳解(springboot)

 更新時(shí)間:2020年11月11日 10:03:51   作者:一起碼代碼  
這篇文章主要介紹了Mybatis plus的自動(dòng)填充與樂(lè)觀鎖的實(shí)例詳解(springboot),本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

自動(dòng)填充

項(xiàng)目中經(jīng)常會(huì)遇到一些數(shù)據(jù),每次都使用相同的方式填充,如插入時(shí)間、更新時(shí)間。Mybatis-plus的自動(dòng)填充功能可以幫助我們快速實(shí)現(xiàn)。

1.表中加入create_time,update_time字段

在這里插入圖片描述

2.實(shí)體類(lèi)注解填充字段

@TableField(fill= FieldFill.INSERT)
  private Date createTime;

  @TableField(fill = FieldFill.INSERT_UPDATE)
  private Date updateTime;

/**
* 默認(rèn)不處理
/
DEFAULT,
/
*
* 插入填充字段
/
INSERT,
/
*
* 更新填充字段
/
UPDATE,
/
*
* 插入和更新填充字段
*/
INSERT_UPDATE

3.自定義實(shí)現(xiàn)類(lèi)MyMetaObjectHandler

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

  /**
   *
   * 使用Mybatis-plus執(zhí)行insert操作這個(gè)方法執(zhí)行
   */
  @Override
  public void insertFill(MetaObject metaObject) {
      this.setFieldValByName("createTime",new Date(),metaObject);
      this.setFieldValByName("updateTime",new Date(),metaObject);
  }

  /**
   *
   * 使用Mybatis-plus執(zhí)行update操作這個(gè)方法執(zhí)行
   */
  @Override
  public void updateFill(MetaObject metaObject) {
    this.setFieldValByName("updateTime",new Date(),metaObject);
  }
}

setFieldValByName中有三個(gè)參數(shù),第一個(gè)是字段名,第二個(gè)是要填充的數(shù)據(jù),第三個(gè)參數(shù)寫(xiě)成metaObject就可以。

測(cè)試插入:

在這里插入圖片描述
在這里插入圖片描述

測(cè)試修改:

在這里插入圖片描述

在這里插入圖片描述

發(fā)現(xiàn)插入數(shù)據(jù)的時(shí)候會(huì)自動(dòng)將這兩個(gè)數(shù)據(jù)填充當(dāng)前時(shí)間,更新的時(shí)候會(huì)只講更新時(shí)間更改為當(dāng)前時(shí)間。

樂(lè)觀鎖

當(dāng)項(xiàng)目中出現(xiàn)并發(fā)操作時(shí),會(huì)出現(xiàn)丟失更新問(wèn)題,即A與B都查詢到money字段為100,A修改money+900,改為1000。這時(shí)B也提交修改,money+50,改為150。A的修改就丟失了。
解決這種情況有兩種方法:悲觀鎖和樂(lè)觀鎖,悲觀鎖就是只能一個(gè)一個(gè)操作,A操作的時(shí)候B只能等著,等A提交完成了B才能查詢。
Mybatis-plus自帶樂(lè)觀鎖:創(chuàng)建一個(gè)version字段,當(dāng)A與B可以同時(shí)操作,當(dāng)A提交的時(shí)候會(huì)看當(dāng)前版本號(hào)與查詢時(shí)候的版本號(hào)是否一致,一致才能提交成功,否則提交失敗,提交成功會(huì)把當(dāng)前版本號(hào)+1。

1.數(shù)據(jù)庫(kù)中加入version字段,并在實(shí)體類(lèi)中加入version屬性。

加上 @Version注解

 @Version
  private Integer version;

2.編寫(xiě)配置類(lèi)引入樂(lè)觀鎖插件

@Configuration
@MapperScan("com.zyw.mpdemo.mapper")
public class MpConfig {
  
  @Bean
  public OptimisticLockerInterceptor optimisticLockerInterceptor() {
    return new OptimisticLockerInterceptor();
  }

}

3.編寫(xiě)測(cè)試

用兩個(gè)對(duì)象查詢同一個(gè)id,做不同的修改,然后依次提交。

 @Override
  public void test(Account account) {
    Account account1 = accountMapper.selectById(1326188266440888321L);
    Account account2 = accountMapper.selectById(1326188266440888321L);
    account1.setMoney(account.getMoney());
    account2.setMoney(account.getMoney()+100);
    accountMapper.updateById(account1);
    accountMapper.updateById(account2);

  }

在這里插入圖片描述

在這里插入圖片描述

第一次成功,第二次提交失敗,因?yàn)榈诙翁峤坏臅r(shí)候的版本號(hào)與查詢到的不一致。

到此這篇關(guān)于Mybatis plus的自動(dòng)填充與樂(lè)觀鎖(springboot)的文章就介紹到這了,更多相關(guān)Mybatis plus自動(dòng)填充樂(lè)觀鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中泛型學(xué)習(xí)之細(xì)節(jié)篇

    Java中泛型學(xué)習(xí)之細(xì)節(jié)篇

    泛型在java中有很重要的地位,在面向?qū)ο缶幊碳案鞣N設(shè)計(jì)模式中有非常廣泛的應(yīng)用,下面這篇文章主要給大家介紹了關(guān)于Java中泛型細(xì)節(jié)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • Springboot如何連接遠(yuǎn)程服務(wù)器上的數(shù)據(jù)庫(kù)實(shí)踐

    Springboot如何連接遠(yuǎn)程服務(wù)器上的數(shù)據(jù)庫(kù)實(shí)踐

    本文主要介紹了Springboot如何連接遠(yuǎn)程服務(wù)器上的數(shù)據(jù)庫(kù)實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Spring依賴注入的幾種方式分享梳理總結(jié)

    Spring依賴注入的幾種方式分享梳理總結(jié)

    這篇文章主要介紹了Spring依賴注入的幾種方式分享梳理總結(jié),文章圍繞主題展開(kāi)詳細(xì),具有一定參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • SpringSecurity?認(rèn)證實(shí)現(xiàn)流程分析

    SpringSecurity?認(rèn)證實(shí)現(xiàn)流程分析

    SpringSecurity框架通過(guò)一個(gè)過(guò)濾器鏈來(lái)處理認(rèn)證和授權(quán),主要包括UsernamePasswordAuthenticationFilter負(fù)責(zé)處理登錄請(qǐng)求,本文給大家介紹SpringSecurity?認(rèn)證實(shí)現(xiàn)登錄校驗(yàn),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Mybatis查詢返回兩個(gè)或多個(gè)參數(shù)問(wèn)題

    Mybatis查詢返回兩個(gè)或多個(gè)參數(shù)問(wèn)題

    這篇文章主要介紹了Mybatis查詢返回兩個(gè)或多個(gè)參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)雙向鏈表功能

    java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)雙向鏈表功能

    這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)雙向鏈表功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java SpringMVC自學(xué)自講

    Java SpringMVC自學(xué)自講

    本篇文章主要介紹了java SpringMVC——如何獲取請(qǐng)求參數(shù)詳解,詳細(xì)的介紹了每種參數(shù)注解的用法及其實(shí)例。感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java中的同步非阻塞IO模型詳解

    Java中的同步非阻塞IO模型詳解

    這篇文章主要介紹了Java中的同步非阻塞IO模型詳解,同步非阻塞IO模型,我們能夠知道,用戶線程一直發(fā)送請(qǐng)求,內(nèi)核一直都能都?jí)蚍祷?nbsp;,直到內(nèi)核完成準(zhǔn)備數(shù)據(jù)、數(shù)據(jù)拷貝的工作,并且返回成功的指示,在此過(guò)程中用戶線程不是阻塞的狀態(tài),需要的朋友可以參考下
    2024-01-01
  • Java實(shí)現(xiàn)對(duì)中文字符串的排序功能實(shí)例代碼

    Java實(shí)現(xiàn)對(duì)中文字符串的排序功能實(shí)例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)中文字符串的排序功能實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Java編寫(xiě)擲骰子游戲

    Java編寫(xiě)擲骰子游戲

    這篇文章主要介紹了Java編寫(xiě)擲骰子游戲,需要的朋友可以參考下
    2015-11-11

最新評(píng)論