Mybatis-Plus自動填充更新操作相關(guān)字段的實現(xiàn)
在阿里開發(fā)手冊的建表規(guī)約中有說明,數(shù)據(jù)庫表中應(yīng)該都要有create_time、update_time字段;那么在開發(fā)中,對于這些共有字段的處理應(yīng)該要進(jìn)行統(tǒng)一,這樣就可以簡化我們的開發(fā)過程。那么本文就對Mybatis-Plus中的字段自動填充進(jìn)行記錄。
場景介紹
在項目的數(shù)據(jù)表設(shè)計中,每張表都有create_id、create_time、update_id、update_time這四個字段,那么在Java應(yīng)用中,針對新增和修改操作要對這四個字段進(jìn)行相應(yīng)的更改:
create_id
、update_id
要自動填充為當(dāng)前登錄的用戶IDcreate_time
、update_time
要自動填充為當(dāng)前時間
下面說說代碼實現(xiàn):
自動填充處理器
需要實現(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容器才會生效
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; } }
配置實體類中相關(guān)字段的自動填充策略
在@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ǔ)實體類 * * @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)建時間") @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 = "更新時間") @TableField(value = "c_update_time", fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }
我這邊是在實體中抽取了一個父類出來,當(dāng)然也可以直接在實體類的對應(yīng)字段上添加注解。
到此這篇關(guān)于MyBatis-Plus實現(xiàn)字段自動填充功能的示例的文章就介紹到這了,更多相關(guān)MyBatis-Plus 字段自動填充內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MyBatisPlus實現(xiàn)自動填充字段的實踐
- MyBatis-Plus自動填充字段的詳細(xì)教程
- mybatis-plus調(diào)用update方法時,自動填充字段不生效問題及解決
- MyBatis-Puls插入或修改時某些字段自動填充操作示例
- Mybatis-Plus實現(xiàn)公共字段自動填充的項目實踐
- MyBatis-Plus邏輯刪除和字段自動填充的實現(xiàn)
- MyBatis-Plus實現(xiàn)公共字段自動填充功能詳解
- MyBatis-Plus實現(xiàn)字段自動填充功能的示例
- Mybatis plus通用字段自動填充的示例
- Mybatis攔截器實現(xiàn)公共字段填充的示例代碼
相關(guān)文章
Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程
這篇文章主要介紹了Java 單鏈表數(shù)據(jù)結(jié)構(gòu)的增刪改查教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10聊聊java 過濾器、監(jiān)聽器、攔截器的區(qū)別(終結(jié)篇)
這篇文章主要介紹了聊聊java 過濾器、監(jiān)聽器、攔截器的區(qū)別(終結(jié)篇),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02mybatisplus報Invalid bound statement (not found)錯誤的解決方法
搭建項目時使用了mybatisplus,項目能夠正常啟動,但在調(diào)用mapper方法查詢數(shù)據(jù)庫時報Invalid bound statement (not found)錯誤。本文給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧2020-08-08Java 中HashCode作用_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了Java 中HashCode作用以及hashcode對于一個對象的重要性,對java中hashcode的作用相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2017-05-05springboot集成elasticsearch7的圖文方法
本文記錄springboot集成elasticsearch7的方法,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-05-05springboot項目中jackson-序列化-處理 NULL教程
這篇文章主要介紹了springboot項目中jackson-序列化-處理 NULL教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10