mybatis-plus自动填充

在实际开发中创建时间与修改时间是必不可少的,新增时间的时候我们常常使用set方法把时间添加进去,

当然这种方法也是可以的,一次两次还是,要是n次的话就有些影响性能了。程序员讲究的是封装,封装好以后拿来用就行,多省事。

 

1.为需要自动填充的属性添加注解@TableField

提供了4种填充策略:

DEFAULT,默认不处理,INSERT,插入填充字段,UPDATE,更新填充字段,INSERT_UPDATE,插入和更新填充字段。

 

比如说新增数据时我需要自动添加创建时间,在该实体类上加上注解@TableField

/**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

 

编辑时自动填充修改时间

   /**
     * 修改时间
     */
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

 

2.实现字段填充控制器,编写自定义填充规则
实现 MetaObjectHandler 接口,实现 insertFill 和 updateFill 方法,此处的 create_time 和update_time字段需要插入时填充值, 只有 update_time 字段在修改时需要填充,所以策略如下。
需要将自定义填充控制器注册为组件
/**
 * mp自动填充组件
 *
 * @author : chenKeFeng
 * @date : 2022/10/9 15:40
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ...");
        //根据属性名字设置要填充的值
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

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

这里的是createTime,updateTime就是你实体类对应的字段

 

接下来测试
 @Test
    void test01() {
        UsersVo usersVo = new UsersVo();
        usersVo.setUserName("aa");
        usersVo.setPassword("12345678");
        usersVo.setScore(33);
        Users users = new Users();
        BeanUtils.copyProperties(usersVo, users);

        usersMapper.insert(users);
    }

新增数据后创建时间不需要set也会自动新增了

 

 @Test
    void test02() {
        Users users = new Users();
        LambdaUpdateWrapper<Users> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(Users::getId, 18);
        users.setUserName("abc");
        usersMapper.update(users, updateWrapper);
    }

编辑时自动更新修改时间

 

posted @ 2022-10-09 16:48  安详的苦丁茶  阅读(80)  评论(0编辑  收藏  举报