在MyBatisPlus中使用@TableField完成字段自動(dòng)填充的操作
場(chǎng)景
官方文檔:
字段注解 @TableField
com.baomidou.mybatisplus.annotations.TableField
值 | 描述 |
---|---|
value | 字段值(駝峰命名方式,該值可無(wú)) |
update | 預(yù)處理 set 字段自定義注入 |
condition | 預(yù)處理 WHERE 實(shí)體條件自定義運(yùn)算規(guī)則 |
el | 詳看注釋說(shuō)明 |
exist | 是否為數(shù)據(jù)庫(kù)表字段( 默認(rèn) true 存在,false 不存在 ) |
strategy | 字段驗(yàn)證 ( 默認(rèn) 非 null 判斷,查看 com.baomidou.mybatisplus.enums.FieldStrategy ) |
fill | 字段填充標(biāo)記 ( FieldFill, 配合自動(dòng)填充使用 ) |
字段填充策略 FieldFill
值 | 描述 |
---|---|
DEFAULT | 默認(rèn)不處理 |
INSERT | 插入填充字段 |
UPDATE | 更新填充字段 |
INSERT_UPDATE | 插入和更新填充字段 |
實(shí)現(xiàn)
實(shí)體類中有如下屬性,通過(guò)上面的自動(dòng)填充屬性,我們可以實(shí)現(xiàn)
在進(jìn)行插入操作時(shí)對(duì)
添加了注解@TableField(fill = FieldFill.INSERT)
的字段進(jìn)行自動(dòng)填充。
對(duì)添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)
的字段在進(jìn)行插入和更新時(shí)進(jìn)行自動(dòng)填充。
/** * 創(chuàng)建人 */ @TableField(fill = FieldFill.INSERT) private Long creatorId; /** * 創(chuàng)建時(shí)間 */ @TableField(fill = FieldFill.INSERT) private Date gmtCreat; /** * 修改人 */ @TableField(fill = FieldFill.INSERT_UPDATE) private Long modifierId; /** * 修改時(shí)間 */ @TableField(fill = FieldFill.INSERT_UPDATE) private Date gmtModified; /** * 是否可用 */ @TableField(fill = FieldFill.INSERT) private Boolean availableFlag;
這樣我們?cè)诰唧w業(yè)務(wù)中對(duì)實(shí)體類進(jìn)行賦值就可以不用對(duì)這些公共字段進(jìn)行賦值,在執(zhí)行插入或者更新時(shí)就能自動(dòng)賦值并插入數(shù)據(jù)庫(kù)。
那么要自動(dòng)賦的值在哪里配置?
在項(xiàng)目的config包下新建自動(dòng)填充處理類使其實(shí)現(xiàn)接口MetaObjectHandler
并重寫(xiě)其方法:
package com.ws.api.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; /** * 自動(dòng)填充處理類 * @author badao * @version 1.0 * @see **/ @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("modifierId", new Long(111), metaObject); this.setFieldValByName("gmtModified", new Date(), metaObject); this.setFieldValByName("creatorId", new Long(111), metaObject); this.setFieldValByName("gmtCreat",new Date(), metaObject); this.setFieldValByName("availableFlag",true, metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("modifierId", new Long(111), metaObject); this.setFieldValByName("gmtModified", new Date(), metaObject); } }
其中方法參數(shù)中第一個(gè)是前面自動(dòng)填充所對(duì)應(yīng)的字段,第二個(gè)是要自動(dòng)填充的值。
補(bǔ)充:Mybatis-Plus里 @TableField注解 自動(dòng)賦值功能的配置類
package com.jt.auto; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; //完成自動(dòng)填充功能 @Component //將該對(duì)象交給spring容器管理 public class MyMetaObjectHandler implements MetaObjectHandler { /** * 在POJO中添加了 新增/更新的注解,但是必須在數(shù)據(jù)庫(kù)的字段中完成賦值的操作. * 所以.必須明確,新增/更新時(shí)操作的是哪個(gè)字段,及值是多少 * * * @param metaObject */ @Override public void insertFill(MetaObject metaObject) { this.setInsertFieldValByName("created", new Date(), metaObject); this.setInsertFieldValByName("updated", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setUpdateFieldValByName("updated", new Date(), metaObject); } }
@TableField注解完成自動(dòng)填充賦值使用 案例:
package com.jt.pojo; import java.io.Serializable; import java.util.Date; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.experimental.Accessors; //pojo基類,完成2個(gè)任務(wù),2個(gè)日期,實(shí)現(xiàn)序列化 @Data @Accessors(chain=true) public class BasePojo implements Serializable{ @TableField(fill = FieldFill.INSERT) //新增有效 private Date created; @TableField(fill = FieldFill.INSERT_UPDATE) //新增和更新有效 private Date updated; }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- mybatisplus?實(shí)現(xiàn)接口MetaObjectHandler自動(dòng)填充字段值
- mybatisplus實(shí)現(xiàn)自動(dòng)填充時(shí)間的項(xiàng)目實(shí)踐
- MybatisPlus自動(dòng)填充創(chuàng)建(更新)時(shí)間問(wèn)題
- MybatisPlus字段自動(dòng)填充失效,填充值為null的解決方案
- mybatisplus自動(dòng)填充屬性值的實(shí)現(xiàn)步驟
- mybatisPlus自動(dòng)填充更新時(shí)間的示例代碼
- MybatisPlus 插入或更新數(shù)據(jù)時(shí)自動(dòng)填充更新數(shù)據(jù)解決方案
- Mybatisplus自動(dòng)填充實(shí)現(xiàn)方式及代碼示例
- MybatisPlus 自動(dòng)填充的實(shí)現(xiàn)
- MyBatisPlus實(shí)現(xiàn)自動(dòng)填充字段的實(shí)踐
相關(guān)文章
Java接口統(tǒng)一樣式返回模板的實(shí)現(xiàn)
這篇文章主要介紹了Java接口統(tǒng)一樣式返回模板的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12SpringBoot實(shí)現(xiàn)接口等冪次校驗(yàn)的示例代碼
本文主要介紹了SpringBoot實(shí)現(xiàn)接口等冪次校驗(yàn)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01PipedWriter和PipedReader源碼分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了PipedWriter和PipedReader源碼分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-05-05Java提示解析時(shí)已到達(dá)文件結(jié)尾的解決方法
在本篇文章中小編給大家分享了關(guān)于Java提示解析時(shí)已到達(dá)文件結(jié)尾的解決方法,需要的朋友們學(xué)習(xí)下。2019-07-07java request.getParameter中文亂碼解決方法
今天跟大家分享幾個(gè)解決java Web開(kāi)發(fā)中,request.getParameter()獲取URL中文參數(shù)亂碼的解決辦法,需要的朋友可以參考下2020-02-02spring boot security自定義認(rèn)證的代碼示例
這篇文章主要介紹了spring boot security自定義認(rèn)證,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Java實(shí)現(xiàn)線性表的鏈?zhǔn)酱鎯?chǔ)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)線性表的鏈?zhǔn)酱鎯?chǔ),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10