最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

但是mybatis-plus的強(qiáng)大不限于此,請(qǐng)看如下需求該如何處理:

需求

我們需要分頁(yè)查詢(xún) tb_employee 表中,年齡在 18~50 之間性別為男且姓名為 xx 的所有用戶(hù),這時(shí)候我們?cè)撊绾螌?shí)現(xiàn)上述需求呢?

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

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

直接看幾個(gè)案例體會(huì)EntityWrapper的使用

1、分頁(yè)查詢(xún)年齡在18 - 50且gender為0、姓名為tom的用戶(hù):

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

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

2、查詢(xún)gender為0且名字中帶有老師、或者郵箱中帶有a的用戶(hù):

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

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

3、查詢(xún)gender為0,根據(jù)age排序,簡(jiǎn)單分頁(yè):

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

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

4、分頁(yè)查詢(xún)年齡在18 - 50且gender為0、姓名為tom的用戶(hù):

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

?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)造器時(shí),EntityWrapper是new出來(lái)的,而Condition是調(diào)create方法創(chuàng)建出來(lái)。

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的所有用戶(hù)的信息更新為employee中設(shè)置的信息。

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

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

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

Wrappers使用的坑點(diǎn)

假設(shè)param對(duì)象中存在一個(gè)list集合,如果list集合不為空是時(shí),取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); // 編譯通過(guò),執(zhí)行時(shí),如果param中的list為null,則報(bào)null pointer異常,這是因?yàn)閙p在拼接條件時(shí),會(huì)將三個(gè)參數(shù)帶入到eq方法,因此param.getList()為null時(shí),param.getList().get(param.getList().size() - 1) 變成了 null..get(param.getList().size() - 1),所以導(dǎo)致了空指針
? ? list(wrapper);
}

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

相關(guān)文章

  • Java實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能

    Java實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Java INPUTSTREAM如何實(shí)現(xiàn)重復(fù)使用

    Java INPUTSTREAM如何實(shí)現(xiàn)重復(fù)使用

    這篇文章主要介紹了Java INPUTSTREAM如何實(shí)現(xiàn)重復(fù)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 解決spring?security?loginProcessingUrl無(wú)效問(wèn)題

    解決spring?security?loginProcessingUrl無(wú)效問(wèn)題

    這篇文章主要介紹了解決spring?security?loginProcessingUrl無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java對(duì)接Modbus協(xié)議代碼示例

    java對(duì)接Modbus協(xié)議代碼示例

    Modbus是一種串行通信協(xié)議,Modbus已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn),并且現(xiàn)在是工業(yè)電子設(shè)備之間常用的連接方式,這篇文章主要給大家介紹了關(guān)于java對(duì)接Modbus協(xié)議的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Java中全局變量和局部變量詳解(看這篇就夠了)

    Java中全局變量和局部變量詳解(看這篇就夠了)

    在Java中全局變量和局部變量是兩種不同作用域的變量,這篇文章主要給大家介紹了關(guān)于Java中全局變量和局部變量的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),大家看這篇就夠了,需要的朋友可以參考下
    2023-11-11
  • Spring Boot中使用Redis和Lua腳本實(shí)現(xiàn)延時(shí)隊(duì)列的方案

    Spring Boot中使用Redis和Lua腳本實(shí)現(xiàn)延時(shí)隊(duì)列的方案

    通過(guò)使用Redis和Lua腳本,可以在Spring Boot環(huán)境中實(shí)現(xiàn)一個(gè)高效且可靠的延時(shí)隊(duì)列系統(tǒng),這種方法利用了Redis的有序集合數(shù)據(jù)結(jié)構(gòu)和Lua腳本的原子性操作來(lái)確保任務(wù)的正確性和一致性,這篇文章主要介紹了Spring Boot中使用Redis和Lua腳本實(shí)現(xiàn)延時(shí)隊(duì)列,需要的朋友可以參考下
    2024-05-05
  • Java使用Scanner類(lèi)獲取用戶(hù)輸入實(shí)例詳解

    Java使用Scanner類(lèi)獲取用戶(hù)輸入實(shí)例詳解

    在本篇文章里小編給大家整理了關(guān)于Java使用Scanner類(lèi)獲取用戶(hù)輸入實(shí)例內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-11-11
  • SpringBoot配置Actuator組件,實(shí)現(xiàn)系統(tǒng)監(jiān)控

    SpringBoot配置Actuator組件,實(shí)現(xiàn)系統(tǒng)監(jiān)控

    在生產(chǎn)環(huán)境中,需要實(shí)時(shí)或定期監(jiān)控服務(wù)的可用性。Spring Boot的actuator(健康監(jiān)控)功能提供了很多監(jiān)控所需的接口,可以對(duì)應(yīng)用系統(tǒng)進(jìn)行配置查看、相關(guān)功能統(tǒng)計(jì)等。
    2021-06-06
  • idea中的update?project按鈕使用

    idea中的update?project按鈕使用

    這篇文章主要介紹了idea中的update?project按鈕使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 詳解java關(guān)于對(duì)象的比較

    詳解java關(guān)于對(duì)象的比較

    這篇文章主要為大家介紹了java關(guān)于對(duì)象的比較,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01

最新評(píng)論

兴仁县| 淮北市| 延吉市| 巩义市| 邹城市| 色达县| 龙泉市| 桐梓县| 乡城县| 宁陵县| 利川市| 哈尔滨市| 收藏| 临泽县| 陆丰市| 冷水江市| 兴化市| 垦利县| 科尔| 辽宁省| 邛崃市| 阳曲县| 郓城县| 灵宝市| 界首市| 河间市| 临泽县| 班戈县| 秭归县| 无锡市| 唐山市| 黑山县| 盐源县| 衡阳县| 丰都县| 德令哈市| 平南县| 阜南县| 澎湖县| 广昌县| 太白县|