mybatis plus坑之 - updateById写法 导致 自动填充不生效
2020-01-14 13:24
1056 查看
场景
更新一个实体,只修改了普通字段值,对于自动填充的字段不生效。
这个问题困惑了两天,经过各种尝试,终于得知解决办法(见最后一个代码块)。
示例
现假设场景是软删除,只更新deleted字段,需要modifyDate自动更新为最新时间。
有以下两个字段做了自动填充:
@ApiModelProperty("修改时间") @TableField(fill = FieldFill.INSERT_UPDATE) private Date modifyDate; @ApiModelProperty("是否删除") private Boolean deleted;
此时需要软删除相关实体,写法如下:
//不生效 Boolean bol = ENTITY_SERVICE.update(null, new UpdateWrapper<ENTITY>().eq("id", ENTITY_ID).set("deleted", true));
但是只更新了set过的delete字段,尝试换一种写法:
//生效 Boolean bol = ENTITY_SERVICE.update(getBaseMapper().selectById(ENTITY_ID), new UpdateWrapper<ENTITY>().eq("id", ENTITY_ID).set("deleted", true));
此时modifyDate自动更新,于是再尝试查出实体,手动更新,如下:
//不生效 ENTITY ENTITY= getBaseMapper().selectById(ENTITY_ID); ENTITY.setDeleted(true); ENTITY_SERVICE.updateById(ENTITY);
结果又失效了,百思不得其解。。后来经过百度,尝试了又一种写法,只设置ID值和变动值,如下:
//生效 ENTITY ENTITY= new ENTITY(); ENTITY.setId(ENTITY_ID); ENTITY.setDeleted(true); ENTITY_SERVICE.updateById(ENTITY);
总结
-
综上,针对使用update方法,如果想要自动填充生效,写法应类似代码块3.
public boolean update(T entity, Wrapper updateWrapper)
-
在updateById方法中所传的实体参数,针对自动填充的字段:
所以,所传的实体最好不要select出来,而是新new一个实体,赋值id值和变动值(见上一个代码段),updateById方法会根据所传id更新变动值+自动填充字段。
如果字段值非空,则按照所传的值更新;
如果字段值为空,则按照自动填充的规则更新。 - 注意:@Version注解说明:更新时,实体对象的version属性必须有值,才会更新对应字段,所以new实体的方法,会使@version失效
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Mybatis-Plus自动填充的实现示例
- SpringBoot-Mybatis_Plus学习记录之公共字段自动填充
- SpringBoot Mybatis Plus公共字段自动填充功能
- SpringBoot-Mybatis_Plus学习记录之公共字段自动填充
- SpringBoot-Mybatis_Plus学习记录之公共字段自动填充
- [已解决]Mybatis Plus自动填充功能异常
- Mybatis-plus 之字段自动填充
- springmvc mybatis 配置一对多的关系使用 <association> 及实体类写法2Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配自动为该对象填充属性值。支持
- 【MyBatis-Plus】实现字段自动填充功能
- mybatis-plus自动生成代码到相应的model
- mybatis自动填充时间字段示例代码
- springboot使用-Mybatis-Plus 的自动生成代码功能
- 解决chrome浏览器表单自动填充导致input文本框背景变成偏黄色的问题
- SpringBoot+mybatis plus的代码自动生成
- 浏览器自动填充表单导致网页样式丢失
- mybatisplus自动生成
- Maven整合ssm框架(Maven+Spring MVC+Spring+Mybatis Plus),Mybatis Plus自动生成代码(Generator) 文末附码云完整代码
- chrome表单自动填充导致input文本框背景变成偏黄色问题解决
- SpringBoot中mybatis配置自动转换驼峰标识没有生效
- MyBatisPlus AutoGenrator代码自动生成