Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn)
在阿里開發(fā)手冊(cè)的建表規(guī)約中有說明,數(shù)據(jù)庫表中應(yīng)該都要有create_time、update_time字段;那么在開發(fā)中,對(duì)于這些共有字段的處理應(yīng)該要進(jìn)行統(tǒng)一,這樣就可以簡(jiǎn)化我們的開發(fā)過程。那么本文就對(duì)Mybatis-Plus中的字段自動(dòng)填充進(jìn)行記錄。
場(chǎng)景介紹
在項(xiàng)目的數(shù)據(jù)表設(shè)計(jì)中,每張表都有create_id、create_time、update_id、update_time這四個(gè)字段,那么在Java應(yīng)用中,針對(duì)新增和修改操作要對(duì)這四個(gè)字段進(jìn)行相應(yīng)的更改:
- create_id、update_id要自動(dòng)填充為當(dāng)前登錄的用戶ID
- create_time、update_time要自動(dòng)填充為當(dāng)前時(shí)間
下面說說代碼實(shí)現(xiàn):
自動(dòng)填充處理器
需要實(shí)現(xiàn)Mybatis-Plus中的MetaObjectHandler接口
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import hw.topevery.basis.runtime.UserRuntime;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Objects;
/**
* 更新相關(guān)字段處理器
*
* @author whw
* @date 2020/1/3 16:41
*/
@Component
public class UpdateRelatedFieldsMetaHandler implements MetaObjectHandler {
/**
* 新增操作
*
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createId", String.class, getCurrentUserId());
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateId", String.class, getCurrentUserId());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
/**
* 更新操作
*
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateId", String.class, getCurrentUserId());
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
/**
* 獲取當(dāng)前登錄用戶ID
*
* @return
*/
private String getCurrentUserId() {
return "當(dāng)前登錄用戶ID";
}
}
Mybatis-Plus配置類
需要將處理器注入進(jìn)Spring容器才會(huì)生效
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import hw.topevery.kunming.wapi.handler.UpdateRelatedFieldsMetaHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Mybatis-Plus配置類
*
* @author whw
* @date 2020/1/3 16:41
*/
@Configuration
public class MybatisPlusConfig {
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new UpdateRelatedFieldsMetaHandler());
return globalConfig;
}
}
配置實(shí)體類中相關(guān)字段的自動(dòng)填充策略
在@TableField注解中設(shè)置fill屬性
字段填充策略FieldFill說明
| 值 | 描述 |
|---|---|
| DEFAULT | 默認(rèn)不處理 |
| INSERT | 插入填充字段 |
| UPDATE | 更新填充字段 |
| INSERT_UPDATE | 插入和更新填充字段 |
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 基礎(chǔ)實(shí)體類
*
* @author whw
* @date 2020/1/3 17:37
*/
@Data
public class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "創(chuàng)建用戶ID")
@TableField(value = "c_create_id", fill = FieldFill.INSERT)
private String createId;
@ApiModelProperty(value = "創(chuàng)建時(shí)間")
@TableField(value = "c_create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@ApiModelProperty(value = "更新用戶ID")
@TableField(value = "c_update_id", fill = FieldFill.INSERT_UPDATE)
private String updateId;
@ApiModelProperty(value = "更新時(shí)間")
@TableField(value = "c_update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
我這邊是在實(shí)體中抽取了一個(gè)父類出來,當(dāng)然也可以直接在實(shí)體類的對(duì)應(yīng)字段上添加注解。
到此這篇關(guān)于Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mybatis-Plus自動(dòng)填充更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot3實(shí)現(xiàn)優(yōu)雅停機(jī)的完整流程
在現(xiàn)代微服務(wù)架構(gòu)中,優(yōu)雅停機(jī)(Graceful Shutdown)是一項(xiàng)重要功能,可以確保服務(wù)在關(guān)閉時(shí)處理完所有當(dāng)前請(qǐng)求,避免突然終止連接或丟失數(shù)據(jù),Spring Boot 3 提供了對(duì)優(yōu)雅停機(jī)的內(nèi)置支持,本文給大家介紹了SpringBoot3怎樣優(yōu)雅停機(jī),需要的朋友可以參考下2024-10-10
基于自定義BufferedReader中的read和readLine方法
下面小編就為大家分享一篇基于自定義BufferedReader中的read和readLine方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Springboot 整合 Dubbo/ZooKeeper 實(shí)現(xiàn) SOA 案例解析
這篇文章主要介紹了Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例,需要的朋友可以參考下2017-11-11
Java多線程中關(guān)于join方法的使用實(shí)例解析
本文通過實(shí)例代碼給大家實(shí)例介紹了Java多線程中關(guān)于join方法的使用,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01
SpringBoot使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn)
角色權(quán)限校驗(yàn),是保證接口安全必備的能力:有權(quán)限才可以操作,所以,一般對(duì)于這種通用邏輯,推薦不與主業(yè)務(wù)邏輯耦合,那么怎么來解耦,那么本文小編就給大家詳細(xì)講解如何使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn),需要的朋友可以參考下2023-07-07
Maven項(xiàng)目在new module后,pom文件顯示為Ignored pom.xml問題
在Maven項(xiàng)目中,若創(chuàng)建過同名module后刪除,再次創(chuàng)建時(shí)可能導(dǎo)致pom.xml文件被IDEA忽略,原因是IDEA保留了之前module的痕跡,導(dǎo)致重建時(shí)將其視為已刪除的module,解決方法是進(jìn)入IDEA設(shè)置,找到Maven的Ignored Files設(shè)置2024-09-09
java實(shí)現(xiàn)根據(jù)ip地址獲取地理位置的代碼分享
這篇文章主要介紹了java實(shí)現(xiàn)根據(jù)ip地址獲取地理位置的代碼分享,本文中使用的是QQ在線接口,也可以使用新浪、淘寶等提供的在線接口,需要的朋友可以參考下2014-08-08
Java使用POI解析帶圖片的excel文件(簡(jiǎn)潔好用!)
這篇文章主要給大家介紹了關(guān)于Java如何使用POI解析帶圖片的excel文件的相關(guān)資料,最近項(xiàng)目需要讀取excel中的信息,帶圖片,所以這里給大家總結(jié)下,需要的朋友可以參考下2023-08-08
Spring中的@ControllerAdvice三種用法詳解
這篇文章主要介紹了Spring中的@ControllerAdvice三種用法詳解,加了@ControllerAdvice的類為那些聲明了(@ExceptionHandler、@InitBinder或@ModelAttribute注解修飾的)方法的類而提供的<BR>專業(yè)化的@Component,以供多個(gè)Controller類所共享,需要的朋友可以參考下2024-01-01

