今天遇到了一个问题,在更新数据时,mybatis-plus
不会修改属性为空的数据表字段。
在用 mybatis-plus
封装的 updateById
方法来更新数据时,想把一个字段设置为 null
值,但是发现更新后数据没有为 null
还是原来的值,这是因为 mybatis-plus
在更新的时候做了 null
判断,默认不更新为 null
的传参。
解决办法:在需要变更的实体类的属性上加一行注解即可,表示字段允许为空(since 3.1.2)。
@TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
private String name;
下面记录一些 mybatis-plus
注解的用法:
- 是否为数据库表字段 默认 true 存在,false 不存在,注解加在
bean
属性上,表示当前属性不是数据库的字段,但在项目中必须使用。
@TableField(exist = false)
private String name;
- 字段自动填充策略,在
name
这个属性执行修改时,将自动填充一个值(默认为null),即将字段修改为空,而不是不做修改。
@TableField(fill = FieldFill.UPDATE)
private String name;
- 需要排除的属性名
excludeProperty
,作用与@TableField(exist = false)
类似,但注解加在bean
类上,常用于排除通用基类的部分字段(since 3.3.1)。
public class BaseEntity {
/** 创建人 */
@TableField(value = "create_by", fill = FieldFill.INSERT)
private String createBy;
/** 创建时间 */
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
// ...
/** 备注 */
private String remark;
// ...
}
@TableName(value = "bg_blog_article", excludeProperty = {"remark", "..."})
public class BlogArticle extends BaseEntity {
// ...
}