Mybatis-Plus实现数据的自动填充

前提:

在开发工作中,基本上所有的数据表都可能会设计有创建时间、更新时间、创建人、更新人,在编写代码时反复的手写时间赋值和人员赋值的代码,会出现大量的冗余代码,还有可能出现忘记赋值的情况,自动填充的操作可以给我们省去很多的冗余代码,也保证了准确性

一、数据库层面的自动填充

数据库层面的自动填充是通过设置默认值来实现

在数据库创建的时候可以给时间、或者状态等字段设置默认的值,当代码执行数据插入操作的时候,就会自动填充数据进去

其中时间的自动填充需要将默认值设置为 CURRENT_TIMESTAMP ,状态等就看实际情况来确定
在这里插入图片描述
在这里插入图片描述
如果是更新时间,还可以勾选上根据当前的时间戳自动更新的选项

在图形化界面操作(小方这里使用的是Navicat),不一定会有 CURRENT_TIMESTAMP 的选项
在这里插入图片描述
我们可以根据下面的 SQL 去更新自己的表字段,为字段设置默认值

ALTER TABLE your_table_name
MODIFY COLUMN create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间';

这样的操作小方建议可以作用于状态类的字段上,通常通过 0、1 来标记是否删除,是否有效等的状态字段通过数据库层面来实现数据插入时的自动填充会很方便,但是针对时间类的,建议还是通过代码层面来实现自动填充较好。且还有部分数据,如当前登录人、登录账号、部门等数据,数据库层面自动填充不了的,就只能通过代码来实现数据的自动填充

二、Mybatis-Plus 实现数据自动填充

在 SpringBoot + Mybatis-Plus 的项目中,我们可以通过一个拦截器来实现数据的自动填充

定义一个拦截器,实现 MetaObjectHandler 接口,实现其中的 insertFillupdateFill 方法,并将其注册到 Spring 容器中

package com.ghdi.svc.tech.modules.comm.handlers;

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

import java.util.Date;

/**
 * @ClassName: MyMetaObjectHandler
 * @Author: fang
 * @Description:
 */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        //SpringSecurity中获取当前登录用户的方式,读者可以根据项目实际情况去获取当前登录用户
        UserDetails principal = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        this.setFieldValByName("createUser", principal.getUsername(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

上面两个实现的方法,insertFill 表示数据插入时的数据填充,updateFill 表示数据更新时的数据填充,metaObject 是当前操作的对象

之后再实体类需要实现填充数据的字段上加上注解

@TableField(fill = FieldFill.INSERT)
private Date createTime;

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

@TableField(fill = FieldFill.UPDATE)
private Date updateTime;

fill 是用来指定自动填充策略的,其中 FieldFill.INSERT 表示插入时填充数据,FieldFill.UPDATE 表示更新时填充数据

其他的相关策略可以看 MyBatis-Plus的官网
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值