1.修改时前端赋值为null的值后端并没有对原值赋null
问题描述:在修改时前端传过来的数据中包含一些空值,如果用Mybatis-plus封装的一些方法,会进行空值的判断,如果该值为空则会不修改这个值,但我的期望是我传的是空就改为空。
解决方法:实体类属性的@TableField
注解上加入以下属性,可以在修改时不进行null值判断
@TableField(value = "name", updateStrategy = FieldStrategy.IGNORED)
private String name;
产生新的问题:我在做逻辑删除的时候,前端只穿一个ID但是我又不能把数据都置为空值,即便这条数据已经删除。
解决方法:
UpdateWrapper<TarchDepart> tarchDepartWrapper = new UpdateWrapper<>();
tarchDepartWrapper.eq("departId", dto.getDepartId()).set("delFlag", 1);
tarchDepartService.update(tarchDepartWrapper);
同理:实体类属性的@TableField
注解加了以上属性后,在做只改一个或几个字段时的业务(如:生效,失效,逻辑删除)都可用上述方法。
2.实现创建人,创建时间,修改人,修改时间的自动注入
需求描述:在实际开发中,基本每个业务表都会有4个字段创建人,创建时间,修改人,修改时间。如果我们每个表都去手动给这四个字段赋值,一定是一个好的选择
使用MyBatis-plus实现该需求
1.创建MyMetaObjectHandler类,实现MetaObjectHandler接口,重写insertFill和updateFill方法。
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createPerson", SecurityUtils.getLoginUser().getUsername(), metaObject);
this.setFieldValByName("createDate", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updatePerson", SecurityUtils.getLoginUser().getUsername(), metaObject);
this.setFieldValByName("updateDate",new Date(), metaObject);
}
}
2.在实体类属性的@TableField注解中加入属性fill = FieldFill.INSERT
@TableField(value = "createDate", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createDate;
@TableField(value = "createPerson", fill = FieldFill.INSERT)
private String createPerson;
@TableField(value = "updateDate", fill = FieldFill.UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateDate;
@TableField(value = "updatePerson", fill = FieldFill.UPDATE)
private String updatePerson;
以上两步即可实现该功能