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 插入和更新填充字段
hi,我是秋田猫,很高兴认识你,或许我们可以相互分享各自领域的”宝藏“,祝你天天开心~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇