springboot整合mybatisplus自动填充功能(六)---springboot mybatisplus时间填充

本文介绍 MyBatis Plus 的自动填充功能,包括如何配置实体类以实现自动填充,以及通过自定义 MetaObjectHandler 实现创建时间和更新时间等字段的自动设置。

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

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

今天介绍一下MP的自动填充功能,它是个什么玩意呢,之前用JPA的时候,像是创建时间、更新时间、创建人、更新人这些都可以自动设置,而不用自己设置,我想有些小伙伴也像我一样,在设置时间的时候可能会类似这样:setCreatedTime(new Date()),这篇就看一下MP的自动填充功能,以后再也不用自己设置时间了。

像上篇一样,写说下自动填充功能的使用步骤:

  1. t_user表增加字段created_time、updated_time、created_by、updated_by。
  2. User实体增加相应属性 并用@TableField(fill = FieldFill.INSERT)标记, FieldFill填充策略有四种:DEFAULT(默认不处理)、INSERT(插入时填充字段)、UPDATE(更新时填充字段)、INSERT_UPDATE(插入和更新时填充字段)。
  3. 实现MetaObjectHandler接口 重写insertFill、updateFill方法 方法中设置created_time、updated_time等的值。

User类中新增属性:

@Data
@TableName(value = "t_user")
public class User {

    @TableId(value = "user_id",type = IdType.AUTO)
    private Integer userId;
    private String userName;
    private Integer age;
    private SexEnum sex;
    @TableField(fill = FieldFill.INSERT)
    private Date createdTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updatedTime;
    @TableField(fill = FieldFill.INSERT)
    private String createdBy;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updatedBy;

}

自定义实现类实现MetaObjectHandler接口:

先看下官网的示例:

如上,设置值的方法有很多写法,其中有一个setFieldValByName这个方法,也是唯一一个我能从名字看得懂这个方法作用的方法,毕竟英文能力有限,尴尬。。。

看下MyMetaObjectHandler类:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.fillStrategy(metaObject, "createdTime", new Date());
        this.setFieldValByName("updatedTime",new Date(),metaObject);
        this.setFieldValByName("createdBy","admin",metaObject);
        this.setFieldValByName("updatedBy","admin",metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.fillStrategy(metaObject, "updatedTime", new Date());
        this.setFieldValByName("updatedBy","admin",metaObject);
    }
}

新建AutoFillTest测试类测试下:

先看下insert:

    @Test
    public void aInsert(){
        User user = new User();
        user.setUserName("xiaohua");
        user.setAge(18);
        user.setSex(SexEnum.WOMAN);
        userMapper.insert(user);
    }

如上:我们只设置了姓名、年龄和性别,我们期望创建时间、更新时间、创建人、更新人这些能自动填充上,看下执行后数据库的结果:

已经自动填充上了我们想要的数据,再测试下更新操作,会不会为我们自动更新updated_time和updated_by字段值呢?测试方法如下:

    @Test
    public void bUpdate(){
        User user = new User();
        user.setUserId(11);
        user.setAge(30);
        userMapper.updateById(user);
    }

看下执行结果:

完毕!

这里只是简单演示了一下自动填充功能比较常用的填充时间和操作人,实际用的时候肯定不是想我演示的这样将创建人和更新人写死在代码中,具体使用的时候改下就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值