Mybatis-Plus 实现数据自动填充

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

定义一个拦截器,实现 MetaObjectHandler 接口,实现其中的 insertFill 和 updateFill 方法,并将其注册到 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的官网

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容