MyBatis-Plus:saveOrUpdate根據(jù)指定字段更新或插入方式
一、概述
MyBatis-Plus中提供了一個saveOrUpdate()方法,默認情況下可以根據(jù)主鍵是否存在進行更新或插入操作,但是實際場景中,我們會遇到根據(jù)指定字段進行更新或插入的情況。
以下記錄一下如何根據(jù)指定字段進行更新或插入操作。
二、實現(xiàn)方式
- 功能描述: 根據(jù)實體對象的主鍵 ID 進行判斷,存在則更新記錄,否則插入記錄。
- 返回值: boolean,表示插入或更新操作是否成功。
// @TableId 注解屬性值存在則更新記錄,否插入一條記錄 boolean saveOrUpdate(T entity); // 根據(jù)updateWrapper嘗試更新,否繼續(xù)執(zhí)行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
若要根據(jù)指定字段更新,則使用saveOrUpdate(T entity, Wrapper<T> updateWrapper)方法。
IService中存在一種這樣的方法,接收兩個參數(shù),
default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper) { return this.update(entity, updateWrapper) || this.saveOrUpdate(entity); }
在執(zhí)行時的執(zhí)行邏輯是這樣的:
- 首先根據(jù)updateWrapper查詢需要更新哪個記錄;
- 如果能查詢到記錄,則進行更新操作,更新時會根據(jù)entity對象屬性的值進行更新,注意null值會忽略,如果未能查詢到記錄,則會把entity對象進行插入操作;
以一段代碼給出詳細的解釋:
// 導入必要的類 import com.baomidou.mybatisplus.core.conditions.query.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; // 創(chuàng)建一個UpdateWrapper對象,指定查詢條件 UpdateWrapper<User> updateWrapper = Wrappers.query(); updateWrapper.eq("id", 111); // 假設(shè)這里是你的指定字段和條件 // 調(diào)用saveOrUpdate方法,傳入實體對象和UpdateWrapper對象 userMapper.saveOrUpdate(user, updateWrapper);
三、總結(jié)
總的來說,saveOrUpdate(T entity, Wrapper updateWrapper)
方法
會根據(jù)指定的條件先進行查詢,然后根據(jù)查詢結(jié)果自動決定是執(zhí)行更新操作還是插入操作,從而實現(xiàn)根據(jù)指定字段執(zhí)行保存或更新的邏輯。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Sharding-jdbc報錯:Missing the data source
在使用MyBatis-plus進行數(shù)據(jù)操作時,新增Order實體屬性后,出現(xiàn)了數(shù)據(jù)源缺失的提示錯誤,原因是因為userId屬性值使用了隨機函數(shù)生成的Long值,這與sharding-jdbc的路由規(guī)則計算不匹配,導致無法找到正確的數(shù)據(jù)源,通過調(diào)整userId生成邏輯2024-11-11java實現(xiàn)角色及菜單權(quán)限的項目實踐
在Java中,實現(xiàn)角色及菜單權(quán)限管理涉及定義實體類、設(shè)計數(shù)據(jù)庫表、實現(xiàn)服務(wù)層和控制器層,這種管理方式有助于有效控制用戶權(quán)限,適用于企業(yè)級應用,感興趣的可以一起來了解一下2024-09-09SpringBoot 整合 Avro 與 Kafka的詳細過程
本文介紹了如何在Spring Boot中使用Avro和Kafka進行數(shù)據(jù)的序列化和反序列化,并通過MyBatisPlus將數(shù)據(jù)存入數(shù)據(jù)庫,感興趣的朋友跟隨小編一起看看吧2024-12-12SpringBoot @Cacheable自定義KeyGenerator方式
這篇文章主要介紹了SpringBoot @Cacheable自定義KeyGenerator方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Java使用modbus4j實現(xiàn)modbus?tcp通訊
Modbus是由Modicon(現(xiàn)為施耐德電氣公司的一個品牌)在1979年發(fā)明的,是全球第一個真正用于工業(yè)現(xiàn)場的總線協(xié)議,本文主要介紹了java如何使用modbus4j實現(xiàn)modbus?tcp通訊,感興趣的可以了解下2023-12-12