公共字段填充 自定义元数据对象处理器

本文介绍如何通过自定义MetaObjectHandler实现MybatisPlus中菜品(Dish)等类的公共字段自动化填充,减少代码冗余,提高开发效率。涉及MetaObjectHandler接口的使用和实体类注解的配置。
摘要由CSDN通过智能技术生成

1.问题:

我们有一个菜品类dish,有一些属性比如创建时间,修改时间,创建人,修改人。而我们还有其他类比如订单,口味很多类都包含这样的属性,这些属性就是公共字段。
这些属性值设置的代码非常固定也很繁琐,每次增加或者修改的时候代码都是重复的,写起来非常麻烦。

@Data
public class Dish implements Serializable {

    private static final long serialVersionUID = 1L;
    private Long id;
    //菜品名称
    private String name;
    //菜品分类id
    private Long categoryId;
    //菜品价格
    private BigDecimal price;
	//公共字段
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
    private Long createUser;
    private Long updateUser;
}

解决:

我们可以自定义一个元数据对象处理器类来填充这些公共字段,来提高开发效率。
实现mybatis plus里的MetaObjectHandler 接口,按照业务需求重写对应字段的方法。
*填充公共字段MetaObjectHandler
–insertFill指定给什么类型的操作填充字段
–metaObject.setValue(键,值)

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) {
        //公共字段填充[insert...]
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("createUser", BaseContext.getCurrentId());
        metaObject.setValue("updateUser", BaseContext.getCurrentId());
        //BaseContext.getCurrentId()是我自定义的类用来获取每个线程当前登录用户的id值
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        //公共字段填充[update...]
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("updateUser", BaseContext.getCurrentId());
    }
}

实体类对应的公共字段属性要用注解标注才能实现自动填充

  	@TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Long createUser;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值