MybatisPlus@TableField策略【SQL缺少字段】

MybatisPlus@TableField策略【SQL缺少字段】

最近项目上遇到的一个问题,这里记录一下

一个java映射表实体,其中一个字段在数据库定义的json类型,由于是对象,意味着前端可能会传空值,实体举例:


@Data
@TableName(value = "xxxxx", autoResultMap = true)
public class UcodeBusComponentCol extends BaseEntity {

    @ApiModelProperty(value = "链接窗口")
    @TableField(value = "link_popup", typeHandler = FastjsonTypeHandler.class)
    private LinkPopup linkPopup;

}

这个时候就会出现一个奇怪的现象,就是如果linkPopup这个字段如果前端传的null或者是不传linkPopup这个字段的话,数据库不会对link_popup做任何处理,也就是说变成一个无法修改的状态

然后做了debug调试,打印SQL语句证实了我的想法,想了半天可能和@TableField这个字段有关系,后来了解到有@TableField策略这个东西,这里把字段追加上去后,解决了问题,如下:


    @ApiModelProperty(value = "链接窗口")
    @TableField(value = "link_popup", typeHandler = FastjsonTypeHandler.class, updateStrategy = FieldStrategy.IGNORED)
    private LinkPopup linkPopup;

查阅了几篇文章,这里备忘一下

    @TableField(value = "name",updateStrategy = FieldStrategy.IGNORED)
    private String name;

    @TableField(updateStrategy = FieldStrategy.NOT_NULL)
    private String sex;

    @TableField(updateStrategy = FieldStrategy.NOT_EMPTY)
    private String addr;

三种更新策略,如上 ignored 不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值,全为null,这种在update 操作中会有风险,把有值的更新为null

not_null 也是默认策略,也就是忽略null的字段,不忽略""

not-empty 为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库。 这样给实体类的属性加上注解 @TableField(updateStrategy = FieldStrategy.NOT_EMPTY),每次同步数据的时候打开注解,就不会更新到为null的数据了,项目中在关闭注解。

补充:

描述
DEFAULT 默认不处理
INSERT 插入填充字段
UPDATE 更新填充字段
INSERT_UPDATE 插入和更新填充字段