Mybatis-plus踩坑记录(实时更新)

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;

以上两步即可实现该功能


  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值