最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus 默認不更新null的4種方法

 更新時間:2026年01月27日 09:56:29   作者:馬卡巴卡  
本文主要介紹了MyBatis-Plus 默認不更新null的4種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在 MyBatis-Plus 里,更新 null 字段是一個非常常見、也非常容易踩坑的問題。
很多人會遇到這種情況:

我明明 setXxx(null) 了,為什么數(shù)據(jù)庫里還是原來的值?

下面我按 原因 → 解決方案 → 使用建議 來整理一下。

一、為什么 MyBatis-Plus 默認不更新 null?

這是 MyBatis-Plus 的設(shè)計行為,不是 bug。

默認情況下:

@TableField(updateStrategy = FieldStrategy.NOT_NULL)

也就是說:

字段為 null,就不會出現(xiàn)在 UPDATE 語句里

目的是為了:

  • • 防止誤操作把字段更新成 null
  • • 更符合大多數(shù)“只更新有值字段”的業(yè)務(wù)場景

所以你寫:

User?user?=?new?User();
user.setId(1L);
user.setEmail(null);

userMapper.updateById(user);

實際生成的 SQL 類似:

UPDATE?user?SET?id?=???WHERE?id?=??

email 根本沒參與更新。

二、更新 null 的幾種正確方式(重點)

方式一:使用@TableField(updateStrategy = FieldStrategy.IGNORED)(最推薦)

@TableField(updateStrategy = FieldStrategy.IGNORED)
private?String email;

含義是:

不管是不是 null,都參與 update

這時:

user.setEmail(null);
userMapper.updateById(user);

生成 SQL:

UPDATE?user?SET?email?=?NULL?WHERE?id?=??

適合場景

  • • 這個字段本來就允許被清空
  • • 例如:備注、頭像、手機號、郵箱

方式二:在實體類級別統(tǒng)一策略

@TableName(value = "user", autoResultMap = true)
public?class?User?{
}

配合全局配置(不太常用,可以了解):

mybatis-plus:
? global-config:
? ? db-config:
? ? ? update-strategy:?ignored

慎用

  • • 會導致所有字段都能被更新為 null
  • • 風險較大,不適合復雜業(yè)務(wù)

方式三:使用UpdateWrapper(最靈活)

如果你不想改實體類:

UpdateWrapper<User> wrapper =?new?UpdateWrapper<>();
wrapper.eq("id",?1L)
? ? ? ?.set("email",?null);

userMapper.update(null, wrapper);

生成 SQL:

UPDATE?user?SET?email?=?NULL?WHERE?id?=??

適合場景

  • • 后臺管理
  • • 批量操作
  • • 精準控制 SQL

方式四:使用LambdaUpdateWrapper

LambdaUpdateWrapper<User> wrapper = Wrappers.lambdaUpdate();
wrapper.eq(User::getId,?1L)
? ? ? ?.set(User::getEmail,?null);

userMapper.update(null, wrapper);

類型安全、IDE 友好,實際項目更推薦

三、一個容易忽略的坑

邏輯刪除字段 + 更新 null

如果你用了:

@TableLogic
private?Integer deleted;

一定要確認:

  • Wrapper 里有沒有被邏輯刪除條件影響
  • 有些更新失敗,其實是 被邏輯刪除過濾了

到此這篇關(guān)于MyBatis-Plus 默認不更新null的4種方法的文章就介紹到這了,更多相關(guān)MyBatis-Plus 默認不更新null內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

石门县| 肃宁县| 竹溪县| 南木林县| 景德镇市| 凤城市| 新民市| 淮滨县| 大化| SHOW| 巴东县| 师宗县| 边坝县| 集贤县| 太白县| 根河市| 无为县| 德阳市| 遂昌县| 丹棱县| 乾安县| 沙田区| 昌平区| 闵行区| 岳阳县| 什邡市| 巴中市| 梁河县| 成都市| 和林格尔县| 北宁市| 上饶市| 霍邱县| 沾益县| 张家界市| 怀柔区| 兴隆县| 阿图什市| 扬州市| 定襄县| 韩城市|