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 字段在修改时需要填充,所以策略如下。
需要将自定义填充控制器注册为组件
实现 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);
}
编辑时自动更新修改时间