MyBatis-Plus 擴(kuò)展-自動(dòng)填充功能

2022-03-25 13:47 更新

原理:

  • 實(shí)現(xiàn)元對(duì)象處理器接口:?com.baomidou.mybatisplus.core.handlers.MetaObjectHandler ?
  • 注解填充字段 ?@TableField(.. fill = FieldFill.INSERT)? 生成器策略部分也可以配置!

public class User {

    // 注意!這里需要標(biāo)記為填充字段
    @TableField(.. fill = FieldFill.INSERT)
    private String fillField;

    ....
}

  • 自定義實(shí)現(xiàn)類 ?MyMetaObjectHandler?

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推薦使用)
        // 或者
        this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推薦)
        // 或者
        this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 該方法有bug)
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推薦)
        // 或者
        this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推薦)
        // 或者
        this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 該方法有bug)
    }
}

注意事項(xiàng):

  • 填充原理是直接給?entity的屬性設(shè)置值!!!
  • 注解則是指定該屬性在對(duì)應(yīng)情況下必有值,如果無(wú)值則入庫(kù)會(huì)是?null
  • ?MetaObjectHandler提供的默認(rèn)方法的策略均為:如果屬性有值則不覆蓋,如果填充值為?null則不填充
  • 字段必須聲明?TableField?注解,屬性fill選擇對(duì)應(yīng)策略,該聲明告知Mybatis-Plus需要預(yù)留注入SQL字段
  • 填充處理器?MyMetaObjectHandler?在 Spring Boot 中需要聲明?@Component?或?@Bean?注入
  • 要想根據(jù)注解?FieldFill.xxx?和字段名以及字段類型來(lái)區(qū)分必須使用父類的?strictInsertFill?或者?strictUpdateFill?方法
  • 不需要根據(jù)任何來(lái)區(qū)分可以使用父類的?fillStrategy?方法
  • ?update(T t,Wrapper updateWrapper)?時(shí)?t?不能為空,否則自動(dòng)填充失效

public enum FieldFill {
    /**
     * 默認(rèn)不處理
     */
    DEFAULT,
    /**
     * 插入填充字段
     */
    INSERT,
    /**
     * 更新填充字段
     */
    UPDATE,
    /**
     * 插入和更新填充字段
     */
    INSERT_UPDATE
}


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)