1. 程式人生 > 程式設計 >MybatisPlus 自動填充的實現

MybatisPlus 自動填充的實現

一、設定填充時機

使用下面的註解設定填充的時機,例如insert 、update語句

@TableField(fill = FieldFill.INSERT)

有下面4種規則

MybatisPlus 自動填充的實現

原始碼

/**
 * 欄位填充策略列舉類
 *
 * <p>
 * 判斷注入的 insert 和 update 的 sql 指令碼是否在對應情況下忽略掉欄位的 if 標籤生成
 * <if test="...">......</if>
 * 判斷優先順序比 {@link FieldStrategy} 高
 * </p>
 *
 * @author hubin
 * @since 2017-06-27
 */
public enum FieldFill {
  /**
   * 預設不處理
   */
  DEFAULT,/**
   * 插入時填充欄位
   */
  INSERT,/**
   * 更新時填充欄位
   */
  UPDATE,/**
   * 插入和更新時填充欄位
   */
  INSERT_UPDATE
}

二、設定填充的值

建立一個類實現mp提供的MetaObjectHandler介面

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
  @Override
  public void insertFill(MetaObject metaObject) {
    setFieldValByName("欄位名,例如User的createTime",LocalDateTime.now(),metaObject);
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    setFieldValByName("欄位名,例如User的updateTime",metaObject);
  }
}

注意請將中文去掉換成自己實體物件的欄位名

測試程式碼:

User user = new User();
user.setName("張三");
user.setAge(12);
user.setAge(12);
user.setId(11111111111L);
user.setEmail("[email protected]");
user.setManagerId(1087982257332887553L);
int insert = userMapper.insert(user);
System.out.println("插入"+insert);

檢測表中資料:

MybatisPlus 自動填充的實現

說明成功

優化填充規則

案例程式碼:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
  @Override
  public void insertFill(MetaObject metaObject) {
    boolean createTime = metaObject.hasSetter("createTime");//如果有這個欄位返回true
    if (createTime) {//如果欄位不存在則不進行下面的填充
      setFieldValByName("createTime",metaObject);
    }
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    Object updateTime = getFieldValByName("updateTime",metaObject);
    if (null == updateTime) { //沒有設定updateTime值則進行填充如果有設定值則不進行填充
      setFieldValByName("updateTime",metaObject);
    }
  }
}

到此這篇關於MybatisPlus 自動填充的實現的文章就介紹到這了,更多相關MybatisPlus 自動填充內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!