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

mybatis-plus 通用字段自動(dòng)化(如邏輯刪除和更新時(shí)間等)

 更新時(shí)間:2021年01月07日 10:25:59   作者:唱小曲的辣椒兒  
這篇文章主要介紹了mybatis-plus 通用字段自動(dòng)化(如邏輯刪除和更新時(shí)間等),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一般來說某些項(xiàng)目比較規(guī)范的情況下,大多數(shù)表都會(huì)有邏輯刪除字段和通用字段,例如更新時(shí)間,創(chuàng)建時(shí)間,更新人,創(chuàng)建人等等,但是在代碼開發(fā)上會(huì)產(chǎn)生很多冗余的代碼,邏輯刪除的話,自己寫比較繁瑣,而且容易有遺漏邏輯。

本來打算自己寫切面去實(shí)現(xiàn),偶然發(fā)現(xiàn)mybatis-plus已經(jīng)幫封裝實(shí)現(xiàn)了,試了一下,很好用,所以分享一下。

邏輯刪除

邏輯刪除的意思就是某些業(yè)務(wù)表,在用戶刪除某條數(shù)據(jù)的時(shí)候,不真正刪除,而是將此數(shù)據(jù)某字段改成類似“已刪除”,而查詢語句、更新語句等會(huì)忽略此條被邏輯刪除的數(shù)據(jù)。
這里就不多介紹mybatis-plus的基礎(chǔ)使用了,沒接觸過的小伙伴可以去官網(wǎng)研究一下,都是中文,很好看懂。
貼一下我們mybatis-plus的pom依賴:

 <!-- mybatis plus 核心依賴 -->
 <dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.4.0</version>
 </dependency>
 <!-- mybatis plus 代碼生成器依賴 -->
 <dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>3.4.0</version>
 </dependency>
 <!-- 代碼生成器模板 -->
 <dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.1</version>
 </dependency>

邏輯刪除比較簡單,在3.3版本之后只要兩步:

1.在配置文件中加入:

mybatis-plus:
 global-config:
  db-config:
   logic-delete-field: deleted # 全局邏輯刪除的實(shí)體字段名
   logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)
   logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)

這里的deleted就是數(shù)據(jù)庫表中表示邏輯刪除與否的字段名,一般都是tinyint或者boolean,如果是boolean,logic-delete-value和logic-not-delete-value設(shè)置成true和false就行。

2.實(shí)體類字段上加上@TableLogic注解

  @TableLogic
  private Boolean deleted;

當(dāng)然,一般自動(dòng)生成的entity一般不建議做改動(dòng),因?yàn)閑ntity和mapper經(jīng)常會(huì)重新生成,這樣加的代碼就消失了,這里我們修改mybatis-plus代碼生成器中的一個(gè)配置實(shí)現(xiàn):

StrategyConfig strategy = new StrategyConfig();
// 省略命名規(guī)范、entity模式等其他配置
strategy.setLogicDeleteFieldName("deleted");

這里deleted同樣是表字段名,而不是生成的類字段名。

加了這段配置后,自動(dòng)生成的entity就會(huì)帶有@TableLogic注解了。

在使用了封裝化的邏輯刪除后,mybatis-plus就能幫我們實(shí)現(xiàn):

  • 調(diào)用mapper.delete類方法后,不刪除對應(yīng)的記錄,而是將匹配到的記錄的邏輯刪除字段設(shè)置為我們設(shè)定的logic-delete-value值。
  • 調(diào)用查詢語句包括selectList、selectById等語句或者更新語句時(shí),會(huì)自動(dòng)拼上邏輯刪除字段的查詢條件,達(dá)到不會(huì)查詢出已邏輯刪除的記錄

通用字段自動(dòng)化填充

如果說項(xiàng)目要求表設(shè)計(jì)上需要有一些通用字段,比如我現(xiàn)在做的項(xiàng)目每個(gè)主體表都需要有創(chuàng)建時(shí)間、更新時(shí)間、創(chuàng)建人、更新人這四個(gè)字段,mybatis-plus可以幫我們自動(dòng)填充這四個(gè)字段,而不需要我們自己修改。
當(dāng)然,這四個(gè)字段的獲取邏輯必須是有通用方式的。

1.@TableField注解

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

@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;

這里只是一個(gè)例子,F(xiàn)ieldFill.INSERT表示在執(zhí)行insert類方法時(shí)會(huì)自動(dòng)填充此字段,F(xiàn)ieldFill.UPDATE是在執(zhí)行update類方法時(shí)會(huì)自動(dòng)填充此字段,除此之外還有FieldFill.INSERT_UPDATE表示插入和更新時(shí)都會(huì)填充。
當(dāng)然,和邏輯刪除一樣,我們不會(huì)手動(dòng)去加這個(gè)注解,還是依賴代碼生成器的配置:

// 和邏輯刪除一樣的StrategyConfig,不要重復(fù)寫
StrategyConfig strategy = new StrategyConfig();
// 省略命名規(guī)范、entity模式等其他配置
List<TableFill> tableFillList = new ArrayList<>();
tableFillList.add(new TableFill("create_time", FieldFill.INSERT));
tableFillList.add(new TableFill("create_user", FieldFill.INSERT));
tableFillList.add(new TableFill("update_time", FieldFill.UPDATE));
tableFillList.add(new TableFill("update_user", FieldFill.UPDATE));
strategy.setTableFillList(tableFillList);

這里的create_time、create_user等是表里的字段名,當(dāng)mybatis-plus檢測到表里有這些字段時(shí),生成的entity會(huì)自動(dòng)加上對應(yīng)的@TableField注解。

2.自動(dòng)填充處理類

@Component
public class MybatisPlusMetaFillHandler implements MetaObjectHandler {

  @Override
  public void insertFill(MetaObject metaObject) {
    this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
    this.strictInsertFill(metaObject,"createUser",
        ()-> {
          try{
           //這里是我自己項(xiàng)目獲取當(dāng)前session用戶id的方法
            return Long.parseLong(UserContext.getUserInfo().get().getUserId());
          }catch(Exception ignored){
          }
          return null;
        }, Long.class);
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
    this.strictUpdateFill(metaObject,"updateUser",
        ()-> {
          try{
            //這里是我自己項(xiàng)目獲取當(dāng)前session用戶id的方法
            return Long.parseLong(UserContext.getUserInfo().get().getUserId());
          }catch(Exception ignored){
          }
          return null;
        }, Long.class);
  }
}

自定義bean實(shí)現(xiàn)MetaObjectHandler接口,并實(shí)現(xiàn)insertFill方法和updateFill方法,this.strictUpdateFill方法中添加需要自動(dòng)填充的entity字段名和填充Function,比如創(chuàng)建時(shí)間和更新時(shí)間,傳入LocalDateTime::now方法,當(dāng)然也可以用自定義的方法:

()->{
 //比方說我們更新時(shí)間不想太精確,只想設(shè)定為那一天的0點(diǎn)
 return LocalDateTime.now().toLocalDate().atStartOfDay();
}

這兩個(gè)步驟完成后,mybatis-plus就可以自動(dòng)填充此字段了,比如在新增一條記錄時(shí),只需要set此記錄的業(yè)務(wù)值,不設(shè)置create_time和create_user,直接調(diào)用entity.insert()方法,可以在數(shù)據(jù)庫新增的記錄中看到create_time自動(dòng)填充了當(dāng)前時(shí)間,create_user自動(dòng)填充了session中的當(dāng)前用戶id。

這是字段自動(dòng)填充一個(gè)應(yīng)用,可拓展方向有很多,大家可以多多思考,自行發(fā)揮。

到此這篇關(guān)于mybatis-plus 通用字段自動(dòng)化(如邏輯刪除和更新時(shí)間等)的文章就介紹到這了,更多相關(guān)mybatis-plus 字段自動(dòng)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java分析講解序列化與字典功能的序列化

    Java分析講解序列化與字典功能的序列化

    在項(xiàng)目開發(fā)地過程中經(jīng)常會(huì)用到字典存儲某些可配置的值,但相應(yīng)的也會(huì)給開發(fā)帶來復(fù)雜度,比如數(shù)據(jù)庫存儲的值為字典值:0,1,2,3這種類型的值,但是前端頁面卻需要展示為 啟動(dòng)、禁用、刪除 等中文狀態(tài),下面我們來看兩種解決方案
    2022-06-06
  • Spring 項(xiàng)目常用pom文件的依賴

    Spring 項(xiàng)目常用pom文件的依賴

    這篇文章主要介紹了Spring 項(xiàng)目常用pom文件的依賴,文中給大家提到了Spring boot starter pom的依賴關(guān)系說明,需要的朋友參考下吧
    2018-03-03
  • java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別

    java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別

    這篇文章主要介紹了java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java基礎(chǔ)教程之字符流文件讀寫

    Java基礎(chǔ)教程之字符流文件讀寫

    這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之字符流文件讀寫的相關(guān)資料,,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 關(guān)于Linux服務(wù)器配置java環(huán)境遇到的問題小結(jié)

    關(guān)于Linux服務(wù)器配置java環(huán)境遇到的問題小結(jié)

    這篇文章主要介紹了關(guān)于Linux服務(wù)器配置java環(huán)境遇到的問題小結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案

    SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案

    這篇文章主要介紹了SpringMVC表單提交參數(shù)400錯(cuò)誤解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot集成JWT生成token及校驗(yàn)方法過程解析

    SpringBoot集成JWT生成token及校驗(yàn)方法過程解析

    這篇文章主要介紹了SpringBoot集成JWT生成token及校驗(yàn)方法過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java緩存池代碼實(shí)例詳解

    Java緩存池代碼實(shí)例詳解

    本篇文章主要介紹了Java實(shí)現(xiàn)簡單的緩存方法實(shí)例,需要的朋友可以參考下
    2017-04-04
  • SpringBoot中的@ApiModelProperty注解作用

    SpringBoot中的@ApiModelProperty注解作用

    這篇文章主要介紹了SpringBoot中的@ApiModelProperty注解作用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • 關(guān)于注解式的分布式Elasticsearch的封裝案例

    關(guān)于注解式的分布式Elasticsearch的封裝案例

    這篇文章主要介紹了關(guān)于注解式的分布式Elasticsearch的封裝案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

乡城县| 如皋市| 三江| 江油市| 安阳县| 五家渠市| 唐山市| 裕民县| 天等县| 云梦县| 定陶县| 中山市| 始兴县| 邵武市| 宁强县| 广南县| 吉隆县| 广饶县| 彭山县| 陇南市| 柏乡县| 怀仁县| 庐江县| 湘潭县| 合江县| 玉环县| 鄂托克旗| 达拉特旗| 额尔古纳市| 景洪市| 庆云县| 漾濞| 元阳县| 宁国市| 乌兰浩特市| 兴山县| 栖霞市| 阿坝县| 灌南县| 广东省| 德昌县|