公共字段的自动填充(Mybatis-plus 实现的技术)

公共字段的自动填充(Mybatis-plus 实现的技术)

一:概念

数据库中不同表中如果都有相同名称的字段,并且在java中每次赋值的方式一样,会造成代码重复,为了提高代码的复用性, Mybatis-plus 提供了实现这些重复字段自动填充的技术,我们只需写好代码,程序运行时自动帮助我们添加.

二:实现步骤:

1: 找到数据库表对应实体类需要自动填充的字段,在字段上添加@TableField注解,注解里需要添加fill属性,值根据增加还是修改进行选择.

 //插入时自动填充
    @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;

2: 自定义一个类实现 Mybatis-plus提供的接口 MetaObjectHandler (处理数据库字段填充),重写insertFill 方法 (插入操作自动填充)和 updateFill (更新操作自动填充)两个方法,在方法中,用MetaObject 的对象调用setValue方法将自动填充的字段进行赋值

package com.itheima.reggie.common;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 添加和修改操作时将公共字段的数据进行自动填充
 */
@Component //处理器需要被spring管理 需要被发现
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
    /**
     * 添加的时候将公共字段自动填充
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
      log.info("添加的时候完成自动填充");
      log.info("看一下metaObject:{}",metaObject);
      //设置创建时间为当前时间
      metaObject.setValue("createTime", LocalDateTime.now());
      // 设置修改时间为当前时间
      metaObject.setValue("updateTime", LocalDateTime.now());
      // 设置创建人为当前登录用户的id
      metaObject.setValue("createUser",BaseContext.getCurrentId() );
      // 设置修改人为当前登录用户的id
      metaObject.setValue("updateUser",BaseContext.getCurrentId() );
    }

    /**
     * 修改的时候公共字段自动填充
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
         log.info("更新时完成自动填充");
         log.info("看一下metaObject:{}",metaObject);
        // 设置修改时间为当前时间
         metaObject.setValue("updateTime",LocalDateTime.now());
        // 设置修改人为当前登录用户的id
         metaObject.setValue("updateUser",BaseContext.getCurrentId());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值