MyBatis-Plus中更新操作的兩種實(shí)現(xiàn)
前言
本文學(xué)習(xí)MP中的更新操作方法,帶大家一起查看源碼,了解更新操作的方法。學(xué)會(huì)熟練地去運(yùn)用更新方法解決自己在項(xiàng)目中的問題。
一、通過id更新
1.查看mapper繼承的BaseMapper下通過id更新的方法updateById可看出參數(shù)傳入的是一個(gè)對(duì)象。并且返回的是一個(gè)int類型的值, 該值的含義就是受影響的行數(shù)。為0表示更新失敗,作為以后開發(fā)中要處理的邏輯有用處。如下圖所示:
2.編寫測(cè)試類testUpdateById方法,在方法中通過調(diào)用MP的updateById對(duì)數(shù)據(jù)庫表中的名字和郵箱進(jìn)行修改。
//測(cè)試通過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語句:如下圖所示,可看到sql語句把表中的user_id字段作為條件,對(duì)user表中的user_name、user_email字段的值進(jìn)行修改。
4.查詢修改結(jié)果調(diào)用通過id查詢的方法查詢user_id=1的表信息是否發(fā)生改變。
//測(cè)試通過id查詢 @Test public void testSelectById(){ User user = userMapper.selectById(1L); System.out.println(user); }
效果如下圖所示,可看到用戶名和郵箱已經(jīng)變?yōu)榱诵薷暮蟮闹担薷某晒Γ。?/p>
二、條件更新
在做條件更新時(shí)我們要用到MP中的update方法,先來看下源碼:要傳入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出來,然后用.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é)果,通過生成的sql代碼,可看出和我們編寫的代碼一樣,條件是user_status字段,要修改的字段是user_name、user_email值。
注:再次強(qiáng)調(diào)eq方法中的第一個(gè)參數(shù)是數(shù)據(jù)庫表的字段,而不是屬性名。
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出來,然后用.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語句是一樣的,也能進(jìn)行更新操作:
注:強(qiáng)調(diào)eq方法中的第一個(gè)參數(shù)是數(shù)據(jù)庫表的字段,而不是屬性名。 UpdateWrapper中的set方法也是一樣的。
總結(jié)
更新操作也是我們?cè)趯?shí)際寫代碼中必不可少的,掌握MP的更新操作,不管是通過id更新還是條件更新中的QueryWrapper、UpdateWrapper來更新。學(xué)會(huì)的話會(huì)很方便以后的開發(fā),節(jié)省大量的時(shí)間。雖說條件更新中這兩個(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)文章
JSON--List集合轉(zhuǎn)換成JSON對(duì)象詳解
這篇文章主要介紹了List集合轉(zhuǎn)換成JSON對(duì)象,小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。2017-01-01Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的方法
我們?cè)谔幚頂?shù)據(jù)的時(shí)候經(jīng)常會(huì)需要進(jìn)行排序后再返回給前端調(diào)用,比如按照時(shí)間升序排序,前端展示數(shù)據(jù)就是按時(shí)間先后進(jìn)行排序,下面這篇文章主要給大家介紹了關(guān)于Java中Stream流對(duì)多個(gè)字段進(jìn)行排序的相關(guān)資料,需要的朋友可以參考下2023-10-10JDBC實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了JDBC實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02java編譯時(shí)出現(xiàn)使用了未經(jīng)檢查或不安全的操作解決方法
這篇文章主要介紹了java編譯時(shí)出現(xiàn)使用了未經(jīng)檢查或不安全的操作的解決方法,需要的朋友可以參考下2014-03-03實(shí)例詳解Java中ThreadLocal內(nèi)存泄露
這一篇文章我們來分析一個(gè)Java中ThreadLocal內(nèi)存泄露的案例。分析問題的過程比結(jié)果更重要,理論結(jié)合實(shí)際才能徹底分析出內(nèi)存泄漏的原因。2016-08-08java Class文件內(nèi)部結(jié)構(gòu)解析過程詳解
java class的文件結(jié)構(gòu),java class文件結(jié)構(gòu)是基于字節(jié)流的,用unicode進(jìn)行編碼,下面說說java Class文件內(nèi)部結(jié)構(gòu)分析2013-11-11Java基礎(chǔ)之final關(guān)鍵字作用案例
這篇文章主要介紹了Java基礎(chǔ)之final關(guān)鍵字作用案例,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07