mybatis-plus实现通用字段自动注入填充

发布于:2025-07-30 ⋅ 阅读:(22) ⋅ 点赞:(0)

mybatis-plus提供了在插入和更新时,通过配置注解的方式,将某些公共字段的值自动注入的功能。例如createDate,updateDate,creator,updater等字段属性的值,在更新和插入时都是一致的重复代码。

核心代码是实现MetaObjectHandler接口,重写insertFill()和updateFill()方法。

后续使用只需要在实体类的属性上,添加对应的注解即可。注解的值有三种:@TableField(fill = FieldFill.INSERT_UPDATE)、@TableField(fill = FieldFill.INSERT)、@TableField(fill = FieldFill.INSERT_UPDATE),分别对应着插入和更新时自动填充,插入时自动填充,更新时自动填充。

下面是FieldMetaObjectHandler核心配置代码:

package io.installer.common.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import io.installer.modules.security.user.SecurityUser;
import io.installer.modules.security.user.UserDetail;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 公共字段,自动填充值
 *
 */
@Component
public class FieldMetaObjectHandler implements MetaObjectHandler {
    private final static String CREATE_DATE = "createDate";
    private final static String CREATOR = "creator";
    private final static String UPDATE_DATE = "updateDate";
    private final static String UPDATER = "updater";
    private final static String DEPT_ID = "deptId";

    @Override
    public void insertFill(MetaObject metaObject) {
        UserDetail user = SecurityUser.getUser();
        Date date = new Date();

        //创建者
        strictInsertFill(metaObject, CREATOR, Long.class, user.getId());
      
        //创建时间
        strictInsertFill(metaObject, CREATE_DATE, Date.class, date);

        //更新者
        strictInsertFill(metaObject, UPDATER, Long.class, user.getId());
      
        //更新时间
        strictInsertFill(metaObject, UPDATE_DATE, Date.class, date);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        //更新者
        strictUpdateFill(metaObject, UPDATER, Long.class, SecurityUser.getUserId());

        //更新时间
        strictUpdateFill(metaObject, UPDATE_DATE, Date.class, new Date());

    }
}

使用时只需要在与数据库交互的实体类上,添加对应注解即可,如下:

@Data
@TableName("sys_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    
    private String username;
    private String password;
    
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    // 其他自动填充字段...
}


网站公告

今日签到

点亮在社区的每一天
去签到