十五、MybatisPlus-自动填充字段

182 阅读1分钟

本文是系列文章,目录:
一、MybatisPlus-基本使用
二、MybatisPlus-进阶使用-条件构造器
三、MybatisPlus-进阶使用-自定义sql
四、MybatisPlus-进阶使用-Service接口(1)-基本使用
五、MybatisPlus-进阶使用-Service接口(2)-自定义service
六、MybatisPlus-进阶使用-Service接口(3)- 批量新增
七、MybatisPlus-进阶使用-逻辑删除
八、MybatisPlus-进阶使用-枚举处理器
九、MybatisPlus-进阶使用-JSON类型处理器
十、MybatisPlus-进阶使用-配置文件加密
十一、MybatisPlus-插件功能-分页插件(1)
十二、MybatisPlus-插件功能-分页插件(2)-通用分页封装
十三、MybatisPlus-插件功能-乐观锁插件
十四、MybatisPlus-插件功能-sql性能分析
十五、MybatisPlus-自动填充字段
MybatisPlus-问题汇总

简介

MyBatis-Plus 提供了一个便捷的自动填充功能,用于在插入或更新数据时自动填充某些字段,如创建时间、更新时间等。

原理概述

自动填充功能通过实现 com.baomidou.mybatisplus.core.handlers.MetaObjectHandler 接口来实现。你需要创建一个类来实现这个接口,并在其中定义插入和更新时的填充逻辑

实现步骤

1. 标记需要填充的字段,并指定填充的策略。

/** 
 * 创建人
 */
@TableField(fill = FieldFill.INSERT)
private String createBy;

/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

/**
 * 更新人
 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;

/**
* 更新时间
*/
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;

2.实现自动填充处理器(MetaObjectHandler)

创建 MyMetaObjectHandler.java

package com.pino.demo.handle;

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) {
       // 插入时自动填充
       // 第二个参数要填写实体类中的字段名称,而不是表的列名称
       strictFillStrategy(metaObject, "createTime", LocalDateTime::now);
       fillStrategy(metaObject, "createBy", "创建人");
    }

    @Override
    public void updateFill(MetaObject metaObject) {
       // 更新时自动填充
       strictFillStrategy(metaObject, "updateTime", LocalDateTime::now);
       fillStrategy(metaObject, "updateBy", "更新人");
    }
}