欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis條件構(gòu)造器(EntityWrapper)的使用方式

 更新時間:2022年03月22日 11:13:28   作者:愿你天黑有燈下雨有傘  
這篇文章主要介紹了mybatis條件構(gòu)造器(EntityWrapper)的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis條件構(gòu)造器(EntityWrapper)使用

基本的 CRUD 操作,我們僅僅需要繼承一個 BaseMapper 即可實現(xiàn)大部分單表 CRUD 操作。BaseMapper 提供了多達 17 個方法供使用, 可以極其方便的實現(xiàn)單一、批量、分頁等操作,極大的減少開發(fā)負(fù)擔(dān)。

但是mybatis-plus的強大不限于此,請看如下需求該如何處理:

需求

我們需要分頁查詢 tb_employee 表中,年齡在 18~50 之間性別為男且姓名為 xx 的所有用戶,這時候我們該如何實現(xiàn)上述需求呢?

使用MyBatis : 需要在 SQL 映射文件中編寫帶條件查詢的 SQL,并用PageHelper 插件完成分頁. 實現(xiàn)以上一個簡單的需求,往往需要我們做很多重復(fù)單調(diào)的工作。

使用MP: 依舊不用編寫 SQL 語句,MP 提供了功能強大的條件構(gòu)造器 ------ EntityWrapper。

直接看幾個案例體會EntityWrapper的使用

1、分頁查詢年齡在18 - 50且gender為0、姓名為tom的用戶:

List<Employee> employees = emplopyeeDao.selectPage(new Page<Employee>(1,3),
? ? ?new EntityWrapper<Employee>()
? ? ? ? .between("age",18,50)
? ? ? ? .eq("gender",0)
? ? ? ? .eq("last_name","tom")
);

注:由此案例可知,分頁查詢和之前一樣,new 一個page對象傳入分頁信息即可。至于分頁條件,new 一個EntityWrapper對象,調(diào)用該對象的相關(guān)方法即可。between方法三個參數(shù),分別是column、value1、value2,該方法表示column的值要在value1和value2之間;eq是equals的簡寫,該方法兩個參數(shù),column和value,表示column的值和value要相等。注意column是數(shù)據(jù)表對應(yīng)的字段,而非實體類屬性字段。

2、查詢gender為0且名字中帶有老師、或者郵箱中帶有a的用戶:

List<Employee> employees = emplopyeeDao.selectList(
? ? ? ? ? ? ? ? new EntityWrapper<Employee>()
? ? ? ? ? ? ? ?.eq("gender",0)
? ? ? ? ? ? ? ?.like("last_name","老師")
? ? ? ? ? ? ? ? //.or()//和or new 區(qū)別不大
? ? ? ? ? ? ? ?.orNew()
? ? ? ? ? ? ? ?.like("email","a")
);

注:未說分頁查詢,所以用selectList即可,用EntityWrapper的like方法進行模糊查詢,like方法就是指column的值包含value值,此處like方法就是查詢last_name中包含“老師”字樣的記錄;“或者”用or或者orNew方法表示,這兩個方法區(qū)別不大,用哪個都可以,可以通過控制臺的sql語句自行感受其區(qū)別。

3、查詢gender為0,根據(jù)age排序,簡單分頁:

List<Employee> employees = emplopyeeDao.selectList(
? ? ? ? ? ? ? ? new EntityWrapper<Employee>()
? ? ? ? ? ? ? ? .eq("gender",0)
? ? ? ? ? ? ? ? .orderBy("age")//直接orderby 是升序,asc
? ? ? ? ? ? ? ? .last("desc limit 1,3")//在sql語句后面追加last里面的內(nèi)容(改為降序,同時分頁)
);

注:簡單分頁是指不用page對象進行分頁。orderBy方法就是根據(jù)傳入的column進行升序排序,若要降序,可以使用orderByDesc方法,也可以如案例中所示用last方法;last方法就是將last方法里面的value值追加到sql語句的后面,在該案例中,最后的sql語句就變?yōu)閟elect ······ order by desc limit 1, 3,追加了desc limit 1,3所以可以進行降序排序和分頁。

4、分頁查詢年齡在18 - 50且gender為0、姓名為tom的用戶:

條件構(gòu)造器除了EntityWrapper,還有Condition。用Condition來處理一下這個需求:

?List<Employee> employees = emplopyeeDao.selectPage(
? ? ? ? ? ? ? ? new Page<Employee>(1,2),
? ? ? ? ? ? ? ? Condition.create()
? ? ? ? ? ? ? ? ? ? ? ? .between("age",18,50)
? ? ? ? ? ? ? ? ? ? ? ? .eq("gender","0")
?);

注:Condition和EntityWrapper的區(qū)別就是,創(chuàng)建條件構(gòu)造器時,EntityWrapper是new出來的,而Condition是調(diào)create方法創(chuàng)建出來。

5、根據(jù)條件更新:

@Test
public void testEntityWrapperUpdate(){
? ? ? ? Employee employee = new Employee();
? ? ? ? employee.setLastName("蒼老師");
? ? ? ? employee.setEmail("cjk@sina.com");
? ? ? ? employee.setGender(0);
? ? ? ? emplopyeeDao.update(employee,
? ? ? ? ? ? ? ? new EntityWrapper<Employee>()
? ? ? ? ? ? ? ? .eq("last_name","tom")
? ? ? ? ? ? ? ? .eq("age",25)
? ? ? ? );
}

注:該案例表示把last_name為tom,age為25的所有用戶的信息更新為employee中設(shè)置的信息。

6、根據(jù)條件刪除:

emplopyeeDao.delete(
? ? ? ? new EntityWrapper<Employee>()
? ? ? ? .eq("last_name","tom")
? ? ? ? .eq("age",16)
);

注:該案例表示把last_name為tom、age為16的所有用戶刪除

Wrappers使用的坑點

假設(shè)param對象中存在一個list集合,如果list集合不為空是時,取list集合最后一條的數(shù)據(jù)作為條件

public void test(Param param){
? ? LambdaQueryWrapper<TeacherModel> wrapper = Wrappers.lambdaQuery();
? ? wrapper.eq(collUtil.isNotEmpty(param.getList()), Entity::condition, param.getList().get(param.getList().size() - 1); // 編譯通過,執(zhí)行時,如果param中的list為null,則報null pointer異常,這是因為mp在拼接條件時,會將三個參數(shù)帶入到eq方法,因此param.getList()為null時,param.getList().get(param.getList().size() - 1) 變成了 null..get(param.getList().size() - 1),所以導(dǎo)致了空指針
? ? list(wrapper);
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中@Controller和@RestController的區(qū)別詳解

    Spring中@Controller和@RestController的區(qū)別詳解

    這篇文章主要介紹了Spring中@Controller和@RestController的區(qū)別詳解,@RestController?是?@Controller?和?@ResponseBody?的結(jié)合體,單獨使用?@RestController?的效果與?@Controller?和?@ResponseBody?二者同時使用的效果相同,需要的朋友可以參考下
    2023-10-10
  • java 中Thread.join()的使用方法

    java 中Thread.join()的使用方法

    這篇文章主要介紹了java 中Thread.join()的使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • jsp頁面中獲取servlet請求中的參數(shù)的辦法詳解

    jsp頁面中獲取servlet請求中的參數(shù)的辦法詳解

    在JAVA WEB應(yīng)用中,如何獲取servlet請求中的參數(shù),本文講解了jsp頁面中獲取servlet請求中的參數(shù)的辦法
    2018-03-03
  • Netty分布式ByteBuf使用的底層實現(xiàn)方式源碼解析

    Netty分布式ByteBuf使用的底層實現(xiàn)方式源碼解析

    這篇文章主要為大家介紹了Netty分布式ByteBuf使用底層實現(xiàn)方式源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • java的三種隨機數(shù)生成方式

    java的三種隨機數(shù)生成方式

    主要介紹了java的三種隨機數(shù)生成方式的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2021-07-07
  • Dubbo本地調(diào)試的幾種方式總結(jié)

    Dubbo本地調(diào)試的幾種方式總結(jié)

    dubbo服務(wù)方啟動時需要加載的東西太多,如果跑單元測試把服務(wù)開啟會浪費不少時間,而且單元測試沒法保持服務(wù)一直開啟的狀態(tài),這篇文章主要給大家介紹了關(guān)于Dubbo本地調(diào)試的幾種方式,需要的朋友可以參考下
    2022-11-11
  • 基于Java的Scoket編程

    基于Java的Scoket編程

    本文詳細(xì)講解了基于Java的Scoket編程,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • java調(diào)用相互依賴的dll的處理方法

    java調(diào)用相互依賴的dll的處理方法

    大家好,本篇文章主要講的是java調(diào)用相互依賴的dll的處理方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • SpringBoot項目啟動時預(yù)加載操作方法

    SpringBoot項目啟動時預(yù)加載操作方法

    Spring Boot是一種流行的Java開發(fā)框架,它提供了許多方便的功能來簡化應(yīng)用程序的開發(fā)和部署,這篇文章主要介紹了SpringBoot項目啟動時預(yù)加載,需要的朋友可以參考下
    2023-09-09
  • 淺談web服務(wù)器項目中靜態(tài)請求和動態(tài)請求處理

    淺談web服務(wù)器項目中靜態(tài)請求和動態(tài)請求處理

    這篇文章主要介紹了淺談web服務(wù)器項目中靜態(tài)請求和動態(tài)請求處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論