Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn)
在阿里開(kāi)發(fā)手冊(cè)的建表規(guī)約中有說(shuō)明,數(shù)據(jù)庫(kù)表中應(yīng)該都要有create_time、update_time字段;那么在開(kāi)發(fā)中,對(duì)于這些共有字段的處理應(yīng)該要進(jìn)行統(tǒng)一,這樣就可以簡(jiǎn)化我們的開(kāi)發(fā)過(guò)程。那么本文就對(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)前登錄的用戶(hù)ID
- create_time、update_time要自動(dòng)填充為當(dāng)前時(shí)間
下面說(shuō)說(shuō)代碼實(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)前登錄用戶(hù)ID * * @return */ private String getCurrentUserId() { return "當(dāng)前登錄用戶(hù)ID"; } }
Mybatis-Plus配置類(lèi)
需要將處理器注入進(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配置類(lèi) * * @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í)體類(lèi)中相關(guān)字段的自動(dòng)填充策略
在@TableField注解中設(shè)置fill屬性
字段填充策略FieldFill說(shuō)明
值 | 描述 |
---|---|
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í)體類(lèi) * * @author whw * @date 2020/1/3 17:37 */ @Data public class BaseEntity implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "創(chuàng)建用戶(hù)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 = "更新用戶(hù)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è)父類(lèi)出來(lái),當(dāng)然也可以直接在實(shí)體類(lèi)的對(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)文章
Maven+Tomcat8 實(shí)現(xiàn)自動(dòng)化部署的方法
本篇文章主要介紹了Maven+Tomcat8 實(shí)現(xiàn)自動(dòng)化部署的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10java時(shí)間段查詢(xún)將00:00:00更換成23:59:59
本文主要介紹了java時(shí)間段查詢(xún)將00:00:00更換成23:59:59,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01SpringBoot開(kāi)發(fā)之整合Mybatis詳解
這篇文章主要介紹了SpringBoot開(kāi)發(fā)之整合Mybatis詳解,MyBatis是一個(gè)半自動(dòng)的ORM框架,它允許我們通過(guò)編寫(xiě)SQL語(yǔ)句來(lái)操作數(shù)據(jù)庫(kù),使用MyBatis,我們可以通過(guò)定義映射文件(XML文件)或使用注解的方式將Java對(duì)象與數(shù)據(jù)庫(kù)表進(jìn)行映射,需要的朋友可以參考下2023-09-09自定義注解實(shí)現(xiàn)Spring容器注入Bean方式(類(lèi)似于mybatis的@MapperScans)
本文介紹了如何通過(guò)自定義注解@MyService和@MyServiceScans在SpringBoot項(xiàng)目中自動(dòng)將指定包下的類(lèi)注入Spring容器,詳細(xì)解釋了創(chuàng)建自定義注解、定義包掃描器ClassPathBeanDefinitionScanner的作用與實(shí)現(xiàn)2024-09-09