欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

介紹

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

MyBatis-Puls提供了 MetaObjectHandler 接口,通過重寫其中的 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)文章

  • Java并發(fā)編程之線程池實(shí)現(xiàn)原理詳解

    Java并發(fā)編程之線程池實(shí)現(xiàn)原理詳解

    池化思想是一種空間換時(shí)間的思想,期望使用預(yù)先創(chuàng)建好的對(duì)象來減少頻繁創(chuàng)建對(duì)象的性能開銷,java中有多種池化思想的應(yīng)用,例如:數(shù)據(jù)庫連接池、線程池等,下面就來具體講講
    2023-05-05
  • Springmvc實(shí)現(xiàn)文件下載2種實(shí)現(xiàn)方法

    Springmvc實(shí)現(xiàn)文件下載2種實(shí)現(xiàn)方法

    這篇文章主要介紹了Springmvc實(shí)現(xiàn)文件下載2種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Spring 實(shí)現(xiàn)excel及pdf導(dǎo)出表格示例

    Spring 實(shí)現(xiàn)excel及pdf導(dǎo)出表格示例

    本篇文章主要介紹了Spring 實(shí)現(xiàn)excel及pdf導(dǎo)出表格示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Maven配置倉庫、阿里云鏡像、環(huán)境變量(史上最全)

    Maven配置倉庫、阿里云鏡像、環(huán)境變量(史上最全)

    本文主要介紹了Maven配置倉庫、阿里云鏡像、環(huán)境變量,文中通過圖文示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • 最新評(píng)論