MyBatis-Plus中更新操作的兩種實(shí)現(xiàn)
前言
本文學(xué)習(xí)MP中的更新操作方法,帶大家一起查看源碼,了解更新操作的方法。學(xué)會(huì)熟練地去運(yùn)用更新方法解決自己在項(xiàng)目中的問(wèn)題。
一、通過(guò)id更新
1.查看mapper繼承的BaseMapper下通過(guò)id更新的方法updateById可看出參數(shù)傳入的是一個(gè)對(duì)象。并且返回的是一個(gè)int類型的值, 該值的含義就是受影響的行數(shù)。為0表示更新失敗,作為以后開發(fā)中要處理的邏輯有用處。如下圖所示:

2.編寫測(cè)試類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.查詢修改結(jié)果調(diào)用通過(guò)id查詢的方法查詢user_id=1的表信息是否發(fā)生改變。
//測(cè)試通過(guò)id查詢
@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è)試類中編寫testUpdateQw()方法,修改用戶狀態(tài)為1的用戶名改為(心態(tài)還需努力呀~)和郵箱改為(2132444@qq.com)。
我們把要更新的數(shù)據(jù)放到User類里,條件就需要用到QueryWrapper,首先需要new出來(lái),然后用.eq調(diào)用方法,eq方法里也有兩個(gè)參數(shù),第一個(gè)是表字段名,第二個(gè)是該字段的值。如下圖所示:

然后即可寫出該方法的內(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代碼,可看出和我們編寫的代碼一樣,條件是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è)試類中編寫testUpdateUw()方法,修改用戶狀態(tài)為1的用戶名改為(心態(tài))和郵箱改為(8888888@qq.com)。
要修改的數(shù)據(jù)和條件都要放到UpdateWrapper,首先需要new出來(lái),然后用.set調(diào)用方法,set方法里也有兩個(gè)參數(shù),第一個(gè)是表字段名,第二個(gè)是該字段的值。如下圖所示:
但在寫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í)際寫代碼中必不可少的,掌握MP的更新操作,不管是通過(guò)id更新還是條件更新中的QueryWrapper、UpdateWrapper來(lái)更新。學(xué)會(huì)的話會(huì)很方便以后的開發(fā),節(jié)省大量的時(shí)間。雖說(shuō)條件更新中這兩個(gè)方法實(shí)現(xiàn)的結(jié)果一樣,但最好都掌握,都了解每個(gè)方法的用法。在實(shí)際編寫項(xiàng)目時(shí)習(xí)慣用哪個(gè)看個(gè)人。這也是更新操作的全部?jī)?nèi)容。更多相關(guān)MyBatis-Plus 更新操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家
相關(guān)文章
基于Process#waitFor()阻塞問(wèn)題的解決
這篇文章主要介紹了Process#waitFor()阻塞問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法
這篇文章主要介紹了java實(shí)現(xiàn)基于SMTP發(fā)送郵件的方法,實(shí)例分析了java基于SMTP服務(wù)發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
如何使用JDBC連接數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句
JDBC是Java數(shù)據(jù)庫(kù)連接的縮寫,是Java程序與數(shù)據(jù)庫(kù)進(jìn)行交互的標(biāo)準(zhǔn)API。JDBC主要包括Java.sql和javax.sql兩個(gè)包,通過(guò)DriverManager獲取數(shù)據(jù)庫(kù)連接對(duì)象Connection,并通過(guò)Statement或PreparedStatement執(zhí)行SQL語(yǔ)句2023-04-04
如何解決報(bào)錯(cuò):java.net.BindException:無(wú)法指定被請(qǐng)求的地址問(wèn)題
在Linux虛擬機(jī)上安裝并啟動(dòng)Tomcat時(shí)遇到啟動(dòng)失敗的問(wèn)題,通過(guò)檢查端口及配置文件未發(fā)現(xiàn)異常,后發(fā)現(xiàn)/etc/hosts文件中缺少localhost的映射,添加后重啟Tomcat成功,Tomcat啟動(dòng)時(shí)會(huì)檢查localhost的IP映射,缺失或錯(cuò)誤都可能導(dǎo)致啟動(dòng)失敗2024-10-10
Springboot集成mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置詳解流程
在日常開發(fā)中,若遇到多個(gè)數(shù)據(jù)源的需求,怎么辦呢?通過(guò)springboot集成mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置,簡(jiǎn)單嘗試一下,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
解析Orika的MapperFacade 屬性賦值的使用問(wèn)題
在我們實(shí)際開發(fā)中,常常會(huì)有對(duì)象與對(duì)象之間的轉(zhuǎn)化,或者把一個(gè)對(duì)象的數(shù)據(jù)轉(zhuǎn)化到另一個(gè)數(shù)據(jù)之中,如果我們手動(dòng)的一個(gè)一個(gè)的set就會(huì)比較麻煩,代碼段看起來(lái)也會(huì)比較長(zhǎng)。而Orika的MapperFacade就是解決這個(gè)問(wèn)題的,實(shí)現(xiàn)對(duì)象屬性的復(fù)制2021-12-12
實(shí)例解析Java的Jackson庫(kù)中的數(shù)據(jù)綁定
這篇文章主要介紹了Java的Jackson庫(kù)中的數(shù)據(jù)綁定,這里分為通常的簡(jiǎn)單數(shù)據(jù)綁定與全數(shù)據(jù)綁定兩種情況來(lái)講,需要的朋友可以參考下2016-01-01
SpringBoot上傳圖片與視頻不顯示問(wèn)題的解決方案
這篇文章主要介紹了關(guān)于springboot上傳圖片與視頻不顯示問(wèn)題,最近做畢設(shè)時(shí)候需要上傳視頻的圖片與視頻,但是每次都需要重啟前端才能展示出此圖片,所以本文給大家介紹了SpringBoot上傳圖片與視頻不顯示問(wèn)題的解決方案,需要的朋友可以參考下2024-03-03

