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

MyBatis-Puls插入或修改時(shí)某些字段自動(dòng)填充操作示例

 更新時(shí)間:2023年12月11日 08:52:28   作者:不語(yǔ)  
這篇文章主要為大家介紹了MyBatis-Puls插入或修改時(shí)某些字段自動(dòng)填充操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

介紹

在開發(fā)中,某些字段需要在插入或修改時(shí)自動(dòng)被填充進(jìn)數(shù)據(jù)庫(kù),如創(chuàng)建者,修改者等。

MyBatis-Puls提供了 MetaObjectHandler 接口,通過(guò)重寫其中的 insertFill 與 updateFill 方法,實(shí)現(xiàn)在 新增 or 修改 時(shí) 動(dòng)態(tài)的拿到實(shí)體類,在向?qū)嶓w類中 set 數(shù)據(jù)完成每次 新增或修改時(shí)自動(dòng)填充數(shù)據(jù) 如 創(chuàng)建者、修改者這種數(shù)據(jù)在實(shí)體類上加注解 @TableField(fill = FieldFill.XXXXXX) 選擇進(jìn)入insert時(shí)填充還是update時(shí)填充,還是都填充

樣例

Handler實(shí)現(xiàn)類

/**
 * MP注入處理器
 *
 * @author 
 * @date 2021/4/25
 */
@Slf4j
public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        try {
            if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
                BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();//獲得當(dāng)前要進(jìn)行sql操作的實(shí)體類
                Date current = ObjectUtil.isNotNull(baseEntity.getCreateTime())
                    ? baseEntity.getCreateTime() : new Date();
                baseEntity.setCreateTime(current);
                baseEntity.setUpdateTime(current);
                String username = StringUtils.isNotBlank(baseEntity.getCreateBy())
                    ? baseEntity.getCreateBy() : getLoginUsername();
                // 當(dāng)前已登錄 且 創(chuàng)建人為空 則填充
                baseEntity.setCreateBy(username);
                // 當(dāng)前已登錄 且 更新人為空 則填充
                baseEntity.setUpdateBy(username);
            }
        } catch (Exception e) {
            throw new ServiceException("自動(dòng)注入異常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
        }
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        try {
            if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
                BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();//獲得當(dāng)前要進(jìn)行sql操作的實(shí)體類
                Date current = new Date();
                // 更新時(shí)間填充(不管為不為空)
                baseEntity.setUpdateTime(current);
                String username = getLoginUsername();
                // 當(dāng)前已登錄 更新人填充(不管為不為空)
                if (StringUtils.isNotBlank(username)) {
                    baseEntity.setUpdateBy(username);
                }
            }
        } catch (Exception e) {
            throw new ServiceException("自動(dòng)注入異常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
        }
    }
    /**
     * 獲取登錄用戶名
     */
    private String getLoginUsername() {
        LoginUser loginUser;
        try {
            loginUser = LoginHelper.getLoginUser();
        } catch (Exception e) {
            log.warn("自動(dòng)注入警告 => 用戶未登錄");
            return null;
        }
        return ObjectUtil.isNotNull(loginUser) ? loginUser.getUsername() : null;
    }
}

實(shí)體類

/**
 * Entity基類
 *
 * @author
 */
@Data
public class BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 搜索值
     */
    @JsonIgnore
    @TableField(exist = false)
    private String searchValue;
    /**
     * 創(chuàng)建者
     */
    @TableField(fill = FieldFill.INSERT) //創(chuàng)建時(shí)自動(dòng)填充
    private String createBy;
    /**
     * 創(chuàng)建時(shí)間
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    /**
     * 更新者
     */
    @TableField(fill = FieldFill.INSERT_UPDATE) //創(chuàng)建 or 修改時(shí)自動(dòng)填充
    private String updateBy;
    /**
     * 更新時(shí)間
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    /**
     * 請(qǐng)求參數(shù)
     */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @TableField(exist = false)
    private Map<String, Object> params = new HashMap<>();
}

以上就是MyBatis-Puls插入或修改時(shí)某些字段自動(dòng)填充操作示例的詳細(xì)內(nèi)容,更多關(guān)于MyBatis Puls插入修改自動(dòng)填充的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何使用IDEA的groovy腳本文件生成帶JPA注解的實(shí)體類(圖文詳解)

    如何使用IDEA的groovy腳本文件生成帶JPA注解的實(shí)體類(圖文詳解)

    這篇文章主要介紹了如何使用IDEA的groovy腳本文件生成帶JPA注解的實(shí)體類,本文通過(guò)圖文并茂實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring框架SSM之IOC詳解

    Spring框架SSM之IOC詳解

    本文介紹了Spring框架中IOC(控制反轉(zhuǎn)/依賴注入)的兩種實(shí)現(xiàn)方式,每種方式結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-11-11
  • 淺析IDEA如何正確配置Gradle? GRADLE_USER_HOME 和 Gradle user home的區(qū)別

    淺析IDEA如何正確配置Gradle? GRADLE_USER_HOME 和 Gradle user home的區(qū)別

    這篇文章主要介紹了IDEA如何正確配置Gradle? GRADLE_USER_HOME 和 Gradle user home的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring?Boot?如何通過(guò)ServletRequestHandledEvent事件實(shí)現(xiàn)接口請(qǐng)求的性能監(jiān)控

    Spring?Boot?如何通過(guò)ServletRequestHandledEvent事件實(shí)現(xiàn)接口請(qǐng)求的性能監(jiān)控

    在Spring框架中,監(jiān)控接口請(qǐng)求的性能可以通過(guò)ServletRequestHandledEvent事件實(shí)現(xiàn),這篇文章給大家介紹Spring?Boot?如何通過(guò)ServletRequestHandledEvent事件實(shí)現(xiàn)接口請(qǐng)求的性能監(jiān)控,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • mybatis自動(dòng)填充時(shí)間字段示例代碼

    mybatis自動(dòng)填充時(shí)間字段示例代碼

    這篇文章主要給大家介紹了關(guān)于mybatis自動(dòng)填充時(shí)間字段的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • IDEA新建Springboot項(xiàng)目(圖文教程)

    IDEA新建Springboot項(xiàng)目(圖文教程)

    下面小編就為大家?guī)?lái)一篇IDEA新建Springboot項(xiàng)目(圖文教程)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 使用IDEA開發(fā)配置Java Web的初始化過(guò)程

    使用IDEA開發(fā)配置Java Web的初始化過(guò)程

    該教程使用idea開發(fā)工具初始化javaweb項(xiàng)目,該運(yùn)行在tomcat服務(wù)器上通過(guò)配置項(xiàng)目環(huán)境變量保證tomcat正常啟動(dòng),具體操作配置教程參考下本文
    2021-06-06
  • Java 生成圖片驗(yàn)證碼3種方法(字母、加減乘除、中文)

    Java 生成圖片驗(yàn)證碼3種方法(字母、加減乘除、中文)

    這篇文章主要介紹了Java 生成圖片驗(yàn)證碼3種方法(字母、加減乘除、中文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • MyBatis-Plus?中?typeHandler?的使用實(shí)例詳解

    MyBatis-Plus?中?typeHandler?的使用實(shí)例詳解

    本文介紹了在MyBatis-Plus中如何使用typeHandler處理json格式字段和自定義typeHandler,通過(guò)使用JacksonTypeHandler,可以簡(jiǎn)單實(shí)現(xiàn)將實(shí)體類字段轉(zhuǎn)換為json格式存儲(chǔ),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Java Optional優(yōu)雅處理空指針異常的實(shí)現(xiàn)步驟

    Java Optional優(yōu)雅處理空指針異常的實(shí)現(xiàn)步驟

    本文主要介紹了Java Optional 詳解:優(yōu)雅處理空指針異常,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04

最新評(píng)論

昌江| 古浪县| 南京市| 贡山| 来宾市| 普洱| 泰兴市| 金山区| 额敏县| 南昌县| 金门县| 晋城| 内乡县| 讷河市| 桓台县| 巴彦淖尔市| 樟树市| 开鲁县| 平武县| 大名县| 云阳县| 黎川县| 麻栗坡县| 永顺县| 元阳县| 长治市| 庄河市| 来凤县| 贵定县| 孟连| 噶尔县| 奎屯市| 雷州市| 泽普县| 剑河县| 惠水县| 永新县| 彭泽县| 新河县| 贵德县| 博罗县|