MybatisPlus框架属性自动填充【基于MetaObjectHandler接口】

【项目】MybatisPlus属性自动填充

1、使用提要:

​ 由于项目中使用的是MybatisPlus框架,它提供了自动属性填充。对于数据库中表中一般都要存在的字段,例如createTimeupdateTimecreateUserupdateUser此类字段。每次手动去添加无疑非常麻烦。那么就可以借用到了MybatisPlus提供的MetaObjectHandler接口。实现自动填充。使用如下:

2、操作步骤:

  • 1、在需要实现属性自动填充的字段上添加注解@TableField(fill = *)

image-20220809203854477

package com.baomidou.mybatisplus.annotation;

public enum FieldFill {
    DEFAULT,
    INSERT,
    UPDATE,
    INSERT_UPDATE;

    private FieldFill() {
    }
}
填充的枚举类中的四个属性、根据业务情况进行使用。大部分情况字段只需要创建时定义字段信息。那么就可以使用INSERT. 如果既需要创建又需要修改,那么则可以使用INSERT_UPDATE.
  • 2、编写MetaObjectHandler 实现类
/**
 * @author : Maxim
 * @date : 2022-06-01 14:31
 * @description :
 * 自定义数据对象处理器
 * 这里用到了MybatisPlus提供数据对象处理器 MetaObjectHandler
 **/
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
         /**
         * 这里用到了自定义ThreadLocal:主要用于从每个运行的线程中获取拦截的用户信息。
         * 详情见下方连接
         * */
        Employee employee = EmployeeThreadLocal.get();
        metaObject.setValue("createTime", new Date());
        metaObject.setValue("updateTime", new Date());
        metaObject.setValue("createUser", employee.getId()); // 创建人
        metaObject.setValue("updateUser", employee.getId()); // 修改人
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        Employee employee = EmployeeThreadLocal.get();
        metaObject.setValue("updateTime", new Date());   //修改时间
        metaObject.setValue("updateUser", employee.getId()); //修改人
    }
}
  • 3、业务中执行对应实体的操作在数据库对应表相应字段的变化

image-20220809210738883

内容提要
ThreadLocal中获取拦截的用户信息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis Plus 可以与逻辑删除和自动填充功能结合使用,以实现在逻辑删除操作时自动填充相应字段的值。 要使用逻辑删除和自动填充功能,需要进行以下几个步骤: 1. 在数据库表中添加一个用于标识逻辑删除的字段,例如 `deleted`,通常为一个整型字段。 2. 在对应的实体类中添加一个用于映射逻辑删除字段的属性,并使用 `@TableLogic` 注解进行标识。 3. 创建一个实现了 `MetaObjectHandler` 接口的类,例如 `MyMetaObjectHandler`。 4. 在 `MyMetaObjectHandler` 类中,重写 `insertFill` 和 `updateFill` 方法,用于自动填充逻辑删除字段的值。 5. 在 MyBatis Plus 的配置文件中,添加配置项 `metaObjectHandler`,指定使用的自定义 `MetaObjectHandler` 实现类。 以下是一个示例: ```java public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class); this.strictInsertFill(metaObject, "deleted", false, Boolean.class); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); } } @TableLogic private Boolean deleted; ``` 在上述示例中,`MyMetaObjectHandler` 类中的 `insertFill` 方法会在插入操作时自动填充 `createTime` 和 `deleted` 字段的值,而 `updateFill` 方法会在更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值