Mybatis plus配置MetaObjectHandler

文章介绍了如何利用MyBatisPlus的MetaObjectHandler接口在插入或更新数据时自动填充默认值,如创建人ID、名称、时间和部门信息等。同时,提到了在SQL和建表时也能指定默认值的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:

MetaObjectHandler接口是mybatisPlus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入或者更新数据的时候,为一些字段指定默认值。实现这个需求的方法不止一种,在sql层面也可以做到,在建表的时候也可以指定默认值。

代码如下:

@Slf4j
@Component
public class MetaBasicsHandler implements MetaObjectHandler {

    public static final String UPDATE_TIME = "updateTime";
    public static final String CREATE_TIME = "createTime";

    @Override
    public void insertFill(MetaObject metaObject) {
        setBasicsInfo(Boolean.TRUE,metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        setBasicsInfo(Boolean.FALSE,metaObject);
    }

    private void setBasicsInfo(boolean saveOrUpdate,MetaObject metaObject){
        MagpieUser user = SecurityUtils.getUser();
        if (user == null){return;}
        if (saveOrUpdate){
            /*创建人id*/
            this.setFieldValByName("createId",user.getId(),metaObject);
            /*创建人名称*/
            this.setFieldValByName("createName",user.getUsername(),metaObject);
            /*创建时间*/
            this.setFieldValByName(CREATE_TIME,formatDate(metaObject.getSetterType(CREATE_TIME)),metaObject);
            /*创建人部门id*/
            this.setFieldValByName("createDeptId",user.getDeptId(),metaObject);
            /*创建人部门名称*/
            this.setFieldValByName("createDeptName",user.getCenterName(),metaObject);
            return;
        }
        /*更新人id*/
        this.setFieldValByName("updateId",user.getId(),metaObject);
        /*更新人名称*/
        this.setFieldValByName("updateName",user.getUsername(),metaObject);
        /*更新时间*/
        this.setFieldValByName(UPDATE_TIME,formatDate(metaObject.getSetterType(UPDATE_TIME)),metaObject);
        /*更新人部门id*/
        this.setFieldValByName("updateDeptId",user.getDeptId(),metaObject);
        /*更新人部门名称*/
        this.setFieldValByName("updateDeptName",user.getCenterName(),metaObject);
    }

    /**
     * 处理特殊日期
     * @param setterType 参数类型
     * @return 日期类型
     */
    private Object formatDate(Class<?> setterType){
        if (Date.class.equals(setterType)){
            return new Date();
        } else if (LocalDateTime.class.equals(setterType)) {
            return LocalDateTime.now();
        } else if (Long.class.equals(setterType)) {
            return System.currentTimeMillis();
        }
        return null;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值