1. 程式人生 > 程式設計 >Mybatis-Plus3.2.0 MetaObjectHandler 無法進行公共欄位全域性填充

Mybatis-Plus3.2.0 MetaObjectHandler 無法進行公共欄位全域性填充

問題描述

最近在做的這個專案架構組對於配置檔案決定,採取的是 .xml 配置檔案

一個數據中臺專案,因為部署環境比較複雜,可能需要適配阿里、騰訊、開源等環境和機房,所以配置檔案和啟動類為三類

之前寫的 MetaObjectHandler 都是採用的 SpringBoot 配置方式開發,突然換成 .xml 配置檔案,還是有不少坑的,其中就有配置的 MetaObjectHandler 死活不起作用 ⬆️🔥(上火)

問題程式碼

這種方式放在 平常 SpringBoot 專案中,一點毛病沒有…

@Component
public class MybatisPlusObjectHandler implements MetaObjectHandler {

  @Override
  public void insertFill(MetaObject metaObject) {
    Date now = new Date();

    Object crteTime = getFieldValByName("crteTime",metaObject);
    if (Objects.isNull(crteTime)) {
      setFieldValByName("crteTime",now,metaObject);
    }

    Object optTime = getFieldValByName("optTime",metaObject);
    if (Objects.isNull(optTime)) {
      setFieldValByName("optTime",metaObject);
    }

    setFieldValByName("invdFlag",TpcConstant.INVD,metaObject);
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    Object optTime = getFieldValByName("optTime",new Date(),metaObject);
    }
  }
}

解決方式

將 MybatisPlusObjectHandler 類上的 @Component 去掉,換成在 .xml 中註冊

<bean class="xxx.xxx.xxx.MybatisPlusObjectHandler" id="myMetaObjectHandler"/>

  <bean id="globalConfiguration" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
    <property name="metaObjectHandler" ref="myMetaObjectHandler"/>
  </bean>

  <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <!-- 注入公共欄位填充處理器 -->
    <property name="globalConfig" ref="globalConfiguration" />
  </bean>

問題解決 還是比較疑問 既然採用了 SpringBoot 開發框架,為什麼還是要使用 .xml 配置檔案的這種方式,如果有大佬知道,歡迎評論區留言或私信 👏

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。