在实际开发中创建时间与修改时间是必不可少的,新增时间的时候我们常常使用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); }
编辑时自动更新修改时间
标签:metaObject,users,填充,usersVo,Date,plus,mybatis,new From: https://www.cnblogs.com/ckfeng/p/16772740.html