MyBatis-Plus中的更新操作方式(通過(guò)id更新和條件更新)
一、通過(guò)id更新
1.查看mapper繼承的BaseMapper下通過(guò)id更新的方法updateById可看出參數(shù)傳入的是一個(gè)對(duì)象。并且返回的是一個(gè)int類(lèi)型的值, 該值的含義就是受影響的行數(shù)。
為0表示更新失敗,作為以后開(kāi)發(fā)中要處理的邏輯有用處。
如下圖所示:

2.編寫(xiě)測(cè)試類(lèi)testUpdateById方法,在方法中通過(guò)調(diào)用MP的updateById對(duì)數(shù)據(jù)庫(kù)表中的名字和郵箱進(jìn)行修改。
//測(cè)試通過(guò)id更新數(shù)據(jù)
@Test
public void testUpdateById(){
User user=new User();
user.setUserId(1);//更新id=?的數(shù)據(jù)
//更新內(nèi)容,可多個(gè)
user.setUserName("心態(tài)");
user.setUserEmail("3052273528@qq.com");
int result = userMapper.updateById(user);
System.out.println(result);
}3.運(yùn)行上面的方法得出結(jié)果,查看生成的sql語(yǔ)句:
如下圖所示,可看到sql語(yǔ)句把表中的user_id字段作為條件,對(duì)user表中的user_name、user_email字段的值進(jìn)行修改。

4.查詢(xún)修改結(jié)果調(diào)用通過(guò)id查詢(xún)的方法查詢(xún)user_id=1的表信息是否發(fā)生改變。
//測(cè)試通過(guò)id查詢(xún)
@Test
public void testSelectById(){
User user = userMapper.selectById(1L);
System.out.println(user);
}效果如下圖所示,可看到用戶名和郵箱已經(jīng)變?yōu)榱诵薷暮蟮闹?,修改成功!?/p>

二、條件更新
在做條件更新時(shí)我們要用到MP中的update方法,先來(lái)看下源碼:要傳入2個(gè)參數(shù),第一個(gè)是實(shí)體,就是要進(jìn)行修改的數(shù)據(jù)。
第二個(gè)傳入的是Wrapper是要進(jìn)行更新的條件。
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);2.1 使用QueryWrapper進(jìn)行條件更新
我們先測(cè)試QueryWrapper對(duì)數(shù)據(jù)進(jìn)行條件更新:
在測(cè)試類(lèi)中編寫(xiě)testUpdateQw()方法,修改用戶狀態(tài)為1的用戶名改為(心態(tài)還需努力呀~)和郵箱改為(2132444@qq.com)。
我們把要更新的數(shù)據(jù)放到User類(lèi)里,條件就需要用到QueryWrapper,首先需要new出來(lái),然后用.eq調(diào)用方法,eq方法里也有兩個(gè)參數(shù),第一個(gè)是表字段名,第二個(gè)是該字段的值。
如下圖所示:

然后即可寫(xiě)出該方法的內(nèi)容:
//根據(jù)條件更新QueryWrapper用法
@Test
public void testUpdateQw(){
User user=new User();
user.setUserName("心態(tài)還需努力呀~");
user.setUserEmail("2132444@qq.com");
QueryWrapper<User> wrapper=new QueryWrapper<>();
wrapper.eq("user_status","1");
int result= userMapper.update(user, wrapper);
System.out.println("result=> "+result);
}查看運(yùn)行結(jié)果,通過(guò)生成的sql代碼,可看出和我們編寫(xiě)的代碼一樣,條件是user_status字段,要修改的字段是user_name、user_email值。

注:再次強(qiáng)調(diào)eq方法中的第一個(gè)參數(shù)是數(shù)據(jù)庫(kù)表的字段,而不是屬性名。
2.2 使用UpdateWrapper進(jìn)行條件更新
這次我們測(cè)試UpdateWrapper對(duì)數(shù)據(jù)進(jìn)行條件更新:
在測(cè)試類(lèi)中編寫(xiě)testUpdateUw()方法,修改用戶狀態(tài)為1的用戶名改為(心態(tài))和郵箱改為(8888888@qq.com)。
要修改的數(shù)據(jù)和條件都要放到UpdateWrapper,首先需要new出來(lái),然后用.set調(diào)用方法,set方法里也有兩個(gè)參數(shù),第一個(gè)是表字段名,第二個(gè)是該字段的值。如下圖所示:
但在寫(xiě)update參數(shù)時(shí),因User設(shè)置值的功能被UpdateWrapper實(shí)現(xiàn)了,所以第一個(gè)參數(shù)為null即可,代碼如下:
//根據(jù)條件更新UpdateWrapper用法
@Test
public void testUpdateUw(){
UpdateWrapper<User> wrapper=new UpdateWrapper<>();
wrapper.set("user_name","心態(tài)").set("user_email","8888888@qq.com")//更新的數(shù)據(jù)
.eq("user_status","1");//更新的條件
int result= userMapper.update(null, wrapper);
System.out.println("result=> "+result);
}運(yùn)行效果圖,可看到和上面方法生成的sql語(yǔ)句是一樣的,也能進(jìn)行更新操作:

注:強(qiáng)調(diào)eq方法中的第一個(gè)參數(shù)是數(shù)據(jù)庫(kù)表的字段,而不是屬性名。 UpdateWrapper中的set方法也是一樣的。
總結(jié)
更新操作也是我們?cè)趯?shí)際寫(xiě)代碼中必不可少的,掌握MP的更新操作,不管是通過(guò)id更新還是條件更新中的QueryWrapper、UpdateWrapper來(lái)更新。學(xué)會(huì)的話會(huì)很方便以后的開(kāi)發(fā),節(jié)省大量的時(shí)間。
雖說(shuō)條件更新中這兩個(gè)方法實(shí)現(xiàn)的結(jié)果一樣,但最好都掌握,都了解每個(gè)方法的用法。
在實(shí)際編寫(xiě)項(xiàng)目時(shí)習(xí)慣用哪個(gè)看個(gè)人。這也是更新操作的全部?jī)?nèi)容。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
劍指Offer之Java算法習(xí)題精講N叉樹(shù)的遍歷及數(shù)組與字符串
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03
SpringBoot3.1.2 引入Swagger報(bào)錯(cuò)Type javax.servlet.http
這篇文章主要介紹了SpringBoot3.1.2 引入Swagger報(bào)錯(cuò)Type javax.servlet.http.HttpServletRequest not present解決辦法,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
Spring Boot身份認(rèn)證狀態(tài)的存儲(chǔ)與傳遞實(shí)現(xiàn)方案
本文主要內(nèi)容介紹了在SpringBoot中實(shí)現(xiàn)用戶登錄信息獲取的三種主流方案:基于Session+Cookie、基于JWTToken和基于OAuth2.0/OIDC,并詳細(xì)介紹了每種方案的核心邏輯、代碼實(shí)現(xiàn)、優(yōu)缺點(diǎn)及關(guān)鍵注意點(diǎn),感興趣的朋友跟隨小編一起看看吧2025-11-11
Java中通過(guò)三級(jí)緩存解決Spring循環(huán)依賴(lài)詳解
這篇文章主要介紹了Java中通過(guò)三級(jí)緩存解決Spring循環(huán)依賴(lài)詳解,當(dāng)出現(xiàn)兩個(gè)或多個(gè) Bean 在初始化時(shí)相互依賴(lài)的情況時(shí),Spring Boot 會(huì)將其中一個(gè) Bean 提前暴露出來(lái),以便其他 Bean 能夠在初始化時(shí)正確地引用它,這一策略能有效避免循環(huán)依賴(lài)導(dǎo)致的問(wèn)題,需要的朋友可以參考下2023-09-09
Idea+maven搭建SSH(struts2+hibernate5+spring5)環(huán)境的方法步驟
這篇文章主要介紹了Idea+maven搭建SSH(struts2+hibernate5+spring5)環(huán)境的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Windows下Dubbo+Zookeeper實(shí)現(xiàn)分布式部署教程
本文介紹了如何使用Dubbo和Zookeeper搭建分布式服務(wù),包括環(huán)境準(zhǔn)備、項(xiàng)目結(jié)構(gòu)、依賴(lài)引入、接口與服務(wù)實(shí)現(xiàn)、注解配置及服務(wù)調(diào)用流程,適合初學(xué)者參考和實(shí)踐2025-10-10
java注解實(shí)現(xiàn)websocket服務(wù)的兩種方式
Java WebSocket是一種基于TCP協(xié)議的雙向全雙工消息傳輸技術(shù),它允許服務(wù)器和客戶端之間實(shí)時(shí)通信,具有低延遲和高效率的特點(diǎn),下面這篇文章主要給大家介紹了關(guān)于java注解實(shí)現(xiàn)websocket服務(wù)的兩種方式,需要的朋友可以參考下2024-08-08
SpringBoot全局異常捕獲處理實(shí)現(xiàn)方案
這篇文章主要詳細(xì)介紹了SpringBoot全局異常捕獲處理實(shí)現(xiàn)方案,文章通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02

