1. 程式人生 > 其它 >MyBatis-Plus 欄位自動注入

MyBatis-Plus 欄位自動注入

Application.yml 配置

mybatis-plus:
  configuration:
    call-setters-on-nulls: true #設定當查詢結果值為null時,同樣對映該查詢欄位給map。
    map-underscore-to-camel-case: false # 資料庫下劃線自動轉駝峰標示關閉
    auto-mapping-behavior: full
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:/mapper/*Mapper.xml,classpath*:/mapper/custom/*.xml
  global-config:
    # 邏輯刪除配置
    db-config:
      # 邏輯刪除欄位
      logic-delete-field: deleted
      # 刪除前
      logic-not-delete-value: 0
      # 刪除後
      logic-delete-value: 1

模型

/**
     * 是否刪除 0:正常 1:已刪除
     */
    @TableField(value = "deleted")
    private Byte deleted;

    /**
     * 建立使用者
     */
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private Long createBy;

    /**
     * 更新使用者
     */
    @TableField(value = "update_by", fill = FieldFill.UPDATE)
    private Long updateBy;

    /**
     * 建立時間
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新時間
     */
    @TableField(value = "update_time", fill = FieldFill.UPDATE)
    private Date updateTime;

新建配置自動填充檔案 MyMetaObjectHandler

package com.zyy.config;

import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.zyy.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

/**
 * @author zhouhao
 * @version 1.0
 * @description: 自動填充功能
 * @date 2021/4/28 15:00
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {


    @Override
    public void insertFill(MetaObject metaObject) {
        // 建立時間和更新時間都插入
        Object created = getFieldValByName("createTime", metaObject);
        if (null == created) {
            // 欄位為空,可以進行填充
            setFieldValByName("createTime", DateTime.now(), metaObject);
        }

        Object updated = getFieldValByName("updateTime", metaObject);
        if (null == updated) {
            // 欄位為空,可以進行填充
            setFieldValByName("updateTime", DateTime.now(), metaObject);
        }
        this.setFieldValByName("createBy",SecurityUtils.getCurrentUserId(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", DateTime.now(), metaObject);
        this.setFieldValByName("updateBy",SecurityUtils.getCurrentUserId(), metaObject);
    }
}