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

Mybatis-Plus使用MetaObjectHandler實現(xiàn)自動填充實體對象字段

 更新時間:2024年11月20日 09:09:08   作者:要開心吖ZSH  
在我們使用Mybatis-Plus時,一些簡單的CRUD,你會發(fā)現(xiàn)好多表,許多字段是重復(fù)的,如果我們每次更新或者新增,都要手動賦值,那么會出現(xiàn)許多不必要的重復(fù)操作,所以本文介紹了Mybatis-Plus使用MetaObjectHandler實現(xiàn)自動填充實體對象字段,需要的朋友可以參考下

1.描述

在我們使用Mybatis-Plus時,一些簡單的CRUD。你會發(fā)現(xiàn)好多表,許多字段是重復(fù)的,比如:createTime、updateTime、createBy、updateBy等字段。如果我們每次更新或者新增,都要手動賦值,那么會出現(xiàn)許多不必要的重復(fù)操作。那Mybatis-Plus有沒有一種方案,可以減少這種重復(fù)操作呢?當(dāng)然是有的,那就是MetaObjectHandler(元對象處理)。

主要功能

  • 自動填充:可以在插入(insert)或更新(update)數(shù)據(jù)庫記錄時,自動填充指定的字段值。這對于記錄的創(chuàng)建時間和最后更新時間非常有用。
  • 靈活配置:可以通過注解或者全局配置的方式,指定哪些字段需要自動填充,以及在什么情況下進(jìn)行填充(如僅在插入時,或是在插入和更新時都進(jìn)行填充)。
  • 集成簡單:只需要實現(xiàn) MetaObjectHandler 接口,并重寫相應(yīng)的方法即可。同時,在 Spring Boot 應(yīng)用中,只需將其實現(xiàn)類標(biāo)記為 @Component,就可以自動生效

2.編碼

2.1 定義實體類

首先定義一個實體類,并使用 @TableField 注解來指定哪些字段需要自動填充。例如:

package com.chinaunicom.medical.ihm.core.model;
 
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
 
import java.time.LocalDateTime;
import java.util.Date;
 
public class BaseModel extends IdModel {
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
 
    @TableField(fill = FieldFill.INSERT)
    private String createBy;
 
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;
 
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;
 
    @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;
 
    @TableLogic
    @TableField(fill = FieldFill.INSERT)
    private Integer deleted;
 
    public String getCreateBy() {
        return createBy;
    }
 
    public void setCreateBy(String createBy) {
        this.createBy = createBy;
    }
 
    public String getUpdateBy() {
        return updateBy;
    }
 
    public void setUpdateBy(String updateBy) {
        this.updateBy = updateBy;
    }
 
    public Integer getDeleted() {
        return deleted;
    }
 
    public void setDeleted(Integer deleted) {
        this.deleted = deleted;
    }
 
    public Integer getVersion() {
        return version;
    }
 
    public void setVersion(Integer version) {
        this.version = version;
    }
 
    public LocalDateTime getCreateTime() {
        return createTime;
    }
 
    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }
 
    public LocalDateTime getUpdateTime() {
        return updateTime;
    }
 
    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }
}

2.2 實現(xiàn) MetaObjectHandler

創(chuàng)建一個類實現(xiàn) MetaObjectHandler 接口,并覆蓋 insertFill 和 updateFill 方法。在這個方法中,根據(jù)字段的屬性來決定是否填充以及填充什么樣的值。例如:

package com.chinaunicom.medical.ihm.core.model;
 
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.chinaunicom.medical.ihm.core.context.SysContextHolder;
import org.apache.ibatis.reflection.MetaObject;
 
import java.time.LocalDateTime;
import java.util.Optional;
 
@Component
public class DateMetaObjectHandler implements MetaObjectHandler {
    private String createTimeField = "createTime";
    private String updateTimeField = "updateTime";
    private String createByField = "createBy";
    private String updateByField = "updateBy";
    private String versionField = "version";
    private String deletedField = "deleted";
    private String appIdField = "appId";
    private String tenantIdField = "tenantId";
    private String instanceIdField = "instanceId";
 
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, createTimeField, LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, updateTimeField, LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, versionField, Integer.class, 0);
        this.strictInsertFill(metaObject, deletedField, Integer.class, 0);
 
        this.strictInsertFill(metaObject, createByField, String.class, String.valueOf(Optional.ofNullable(SysContextHolder.getUserId()).orElse(0L)));
        this.strictInsertFill(metaObject, updateByField, String.class, String.valueOf(Optional.ofNullable(SysContextHolder.getUserId()).orElse(0L)));
 
//        this.strictInsertFill(metaObject, appIdField, Long.class, SysContextHolder.getApp());
//        this.strictInsertFill(metaObject, tenantIdField, Long.class, SysContextHolder.getTenant());
//        this.strictInsertFill(metaObject, instanceIdField, Long.class, SysContextHolder.getApplication());
    }
 
 
    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName(updateTimeField, LocalDateTime.now(), metaObject);
        setFieldValByName(updateByField, String.valueOf(Optional.ofNullable(SysContextHolder.getUserId()).orElse(0L)), metaObject);
 
    }
}

2.3 配置 MyBatis-Plus

確保你的項目中已經(jīng)正確配置了 MyBatis-Plus。通常情況下,如果你是使用 Spring Boot,則只需要添加 MyBatis-Plus 的依賴,并在 application.properties 或 application.yml 中做基本配置即可。

3.總結(jié)

  • 當(dāng)你實現(xiàn)了 MetaObjectHandler 并希望它能生效時,確保該類已經(jīng)被 Spring 容器管理(即加上 @Component 注解)。
  • 如果你的項目中有多個 MetaObjectHandler 實現(xiàn),它們會按照 Spring Bean 的加載順序依次執(zhí)行。
  • 在使用 strictInsertFill 和 strictUpdateFill 方法時,確保傳遞的類型與實體類中字段的類型相匹配,否則可能會拋出異常。
  • 通過這種方式,MyBatis-Plus 能夠極大地簡化開發(fā)過程中的數(shù)據(jù)操作,減少手動設(shè)置字段值的工作量,提高開發(fā)效率。

到此這篇關(guān)于Mybatis-Plus使用MetaObjectHandler實現(xiàn)自動填充實體對象字段的文章就介紹到這了,更多相關(guān)Mybatis-Plus自動填充對象字段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot 下的 Static 文件夾打包成前端資源的示例代碼

    SpringBoot 下的 Static 文件夾打包成前端資源的示例代碼

    這篇文章主要介紹了SpringBoot 下的 Static 文件夾如何打包成前端資源,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • java使用鏈表來模擬棧的入棧出棧操作實例代碼

    java使用鏈表來模擬棧的入棧出棧操作實例代碼

    這篇文章主要介紹了java 使用鏈表來模擬棧的入棧出棧操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JVM雙親委派模型知識詳細(xì)總結(jié)

    JVM雙親委派模型知識詳細(xì)總結(jié)

    今天帶各位小伙伴學(xué)習(xí)Java虛擬機的相關(guān)知識,文中對JVM雙親委派模型作了非常詳細(xì)的介紹,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 解決idea check out 切換分支時找不到需要的分支問題

    解決idea check out 切換分支時找不到需要的分支問題

    這篇文章主要介紹了解決idea check out 切換分支時找不到需要的分支問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • maven的卸載與安裝實現(xiàn)方式

    maven的卸載與安裝實現(xiàn)方式

    這篇文章主要介紹了maven的卸載與安裝實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • java中Lambda常用場景代碼實例

    java中Lambda常用場景代碼實例

    這篇文章主要介紹了java中Lambda常用場景,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • IDEA最新版2020.1的maven工程本地依賴倉庫無法使用問題(已解決)

    IDEA最新版2020.1的maven工程本地依賴倉庫無法使用問題(已解決)

    這篇文章主要介紹了IDEA最新版2020.1的maven工程本地依賴倉庫無法使用問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 解決java 分割字符串成數(shù)組時,小圓點不能直接進(jìn)行分割的問題

    解決java 分割字符串成數(shù)組時,小圓點不能直接進(jìn)行分割的問題

    這篇文章主要介紹了解決java 分割字符串成數(shù)組時,小圓點不能直接進(jìn)行分割的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java怎么重命名?Amazon?S3?中的文件和文件夾

    Java怎么重命名?Amazon?S3?中的文件和文件夾

    在本文中,我們探討了使用適用于 Java 的 AWS 開發(fā)工具包重命名 S3 存儲桶中的文件和文件夾的方法,我們探索了兩種不同的情況,它們使用相同的概念來重命名對象,用新名稱復(fù)制它們并刪除原始名稱
    2023-10-10
  • Java線程間協(xié)作wait、notify和notifyAll詳解

    Java線程間協(xié)作wait、notify和notifyAll詳解

    這篇文章主要介紹了Java線程間協(xié)作wait、notify和notifyAll詳解,在 Java 中可以用 wait、notify 和 notifyAll 來實現(xiàn)線程間的通信,盡管關(guān)于wait和notify的概念很基礎(chǔ),它們也都是Object類的函數(shù),但用它們來寫代碼卻并不簡單,,需要的朋友可以參考下
    2023-10-10

最新評論

定南县| 棋牌| 衡南县| 鹤岗市| 五家渠市| 米脂县| 汤阴县| 木兰县| 文昌市| 广西| 什邡市| 海口市| 洛扎县| 苏尼特右旗| 保定市| 武陟县| 石阡县| 澄迈县| 都昌县| 宁化县| 梨树县| 白山市| 米林县| 嘉义县| 玛曲县| 玉树县| 乐昌市| 乌拉特后旗| 德兴市| 威海市| 洛川县| 长丰县| 阜新| 赤水市| 乌兰浩特市| 湾仔区| 宁远县| 凌海市| 洪江市| 剑川县| 灵石县|