亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mybatisplus中EntityWrapper的常用方法

 更新時間:2022年03月22日 11:03:09   作者:你堅持了嗎  
這篇文章主要介紹了mybatisplus中EntityWrapper的常用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

EntityWrapper的常用方法

#WHERE (issue_type = ?) AND (status = ? OR status = ? OR status = ?) 
EntityWrapper wrapper=new EntityWrapper();
        wrapper.eq("issue_type","缺陷").andNew().eq("status","提交").or()
                .eq("status","激活").or().eq("status","解決");

粗心遇到的EntityWrapper的一個坑

公司項目框架是SpringBoot為主題,整合了MyBatisPlus的數(shù)據(jù)庫框架,在Service進(jìn)行簡單的單表查詢時一般直接使用EntityWrapper的包裝類進(jìn)行查詢,比較方便.

但在昨天工作的過程中發(fā)現(xiàn)一個查詢方法來來回回的出錯,查詢條件與預(yù)期不符,最終發(fā)現(xiàn)是一個wrapper中使用addFilterIfNeed時粗心導(dǎo)致的大坑!

Service層查詢語句:

EntityWrapper<PayTiXianApplyEntity> ew=new EntityWrapper<PayTiXianApplyEntity>();
? ? ? ? ew.eq(Util.isNotEmpty(params.getState()), "STATE", params.getState())
? ? ? ? ? ? ? ? //state不為空,根據(jù)state查詢
? ? ? ? ? ? ? ? .like(Util.isNotEmpty(params.getTxname()), "TXNAME", params.getTxname())
? ? ? ? ? ? ? ? .eq(Util.isNotEmpty(params.getTxmode()), "TXMODE", params.getTxmode())
? ? ? ? ? ? ? ? .like(Util.isNotEmpty(params.getTxserial()), "TXSERIAL", params.getTxserial())
? ? ? ? ? ? ? ? .addFilterIfNeed(Util.isNotEmpty(txtime), "DATE_FORMAT(TXTIME,'%Y-%m-%d')='" + txtime+"'")
? ? ? ? ? ? ? ? .addFilterIfNeed(Util.isEmpty(params.getState()),"state=1 or state=3 or state=4")
? ? ? ? ? ? ? ? //state為空,查詢state為1或2的記錄,即出納人審核通過和沒通過的記錄
? ? ? ? ? ? ? ? .orderBy("TXTIME", false);
Page<PayTiXianApplyEntity> page = this.selectPage(
? ? ? ? ? ? ? ? new Query<PayTiXianApplyEntity>(params).getPage(),ew);

由于需求是,根據(jù)參數(shù)不同使用不同的查詢條件.state為空時需查詢表中所有state符合要求的記錄;state不為空,則根據(jù)state=參數(shù)來查詢.

為了省事,所以直接使用了wrapper,其實在MaBatis中使用條件判斷語句也是可以的.

原因

原因就出在為了省事,使用wrapper的addFilterIfNeed上.

出錯的是這條語句:

.addFilterIfNeed(Util.isEmpty(params.getState()),"state=1 or state=3 or state=4")

由于一開始是直接新建的new EntityWrapper的匿名對象,所以即使是debug也查不出錯誤.為了看清SQL,我新建了一個對象ew,在debug過程中仔細(xì)看他的SQL屬性,最后發(fā)現(xiàn)了,在執(zhí)行這條語句時,SQL只是簡單的語句拼接.

也就是說,當(dāng)我state為null時,這條查詢的語句是:(不能寫完整的語句,部分參數(shù)直接用#{}來代替)

SELECT * FROM 表名
WHERE TXNAME like #{txname}?
AND TXMODE=#{txmode}
AND TXSERIAL=#{txserial}
AND DATE_FORMAT(TXTIME,'%Y-%m-%d')=#{txtime}
AND state=1 or state=3 or state=4
ORDER BY TXTIME;

發(fā)現(xiàn)問題了吧!

由于addFilterIfNeed只是簡單的語句拼接,所以即使我這一句寫在了一起,照樣給我原樣加上去的,所以導(dǎo)致查詢邏輯錯誤,進(jìn)而引起查詢條件失效!

解決方案

解決方案很簡單,只要在語句中加上括號即可

.addFilterIfNeed(Util.isEmpty(params.getState()),"(state=1 or state=3 or state=4)")

總結(jié):至此,此次遇到的大坑完整解決,也因此明白EntityWrapper中addFilterIfNeed的實現(xiàn)方式.之前沒發(fā)現(xiàn)這個問題時來來回回改了好多次,都沒有解決問題,直到發(fā)現(xiàn)根源!

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

相關(guān)文章

  • Java解壓zip文件的關(guān)鍵代碼

    Java解壓zip文件的關(guān)鍵代碼

    本文給大家分享一段java解壓zip文件的關(guān)鍵代碼,代碼簡單易懂,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • 基于SpringBoot+vue實現(xiàn)前后端數(shù)據(jù)加解密

    基于SpringBoot+vue實現(xiàn)前后端數(shù)據(jù)加解密

    這篇文章主要給大家介紹了基于SpringBoot+vue實現(xiàn)前后端數(shù)據(jù)加解密,文中有詳細(xì)的示例代碼,具有一定的參考價值,感興趣的小伙伴可以自己動手試一試
    2023-08-08
  • 關(guān)于Object中equals方法和hashCode方法判斷的分析

    關(guān)于Object中equals方法和hashCode方法判斷的分析

    今天小編就為大家分享一篇關(guān)于關(guān)于Object中equals方法和hashCode方法判斷的分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Springboot敏感字段脫敏的實現(xiàn)思路

    Springboot敏感字段脫敏的實現(xiàn)思路

    這篇文章主要介紹了Springboot敏感字段脫敏的實現(xiàn)思路,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • JDK21中虛擬線程到底是什么以及用法總結(jié)(看完便知)

    JDK21中虛擬線程到底是什么以及用法總結(jié)(看完便知)

    這篇文章主要給大家介紹了關(guān)于JDK21中虛擬線程到底是什么以及用法的相關(guān)資料,虛擬線程是一種輕量化的線程封裝,由jvm直接調(diào)度和管理,反之普通的線程其實是調(diào)用的操作系統(tǒng)的能力,對應(yīng)的是操作系統(tǒng)級的線程,需要的朋友可以參考下
    2023-12-12
  • IDEA下Servlet可能出現(xiàn)404的一些情況

    IDEA下Servlet可能出現(xiàn)404的一些情況

    相信有很多小伙伴遇到報錯都不知道怎么處理,今天特地整理了這篇文章,文中對IDEA下Servlet可能出現(xiàn)404的一些情況作了詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • java數(shù)字圖像處理基礎(chǔ)使用imageio寫圖像文件示例

    java數(shù)字圖像處理基礎(chǔ)使用imageio寫圖像文件示例

    這篇文章主要介紹了Java 2D的圖像處理API,文章討論和提及的API都是基于JDK6的,Java中寫一個圖像文件使用ImageIO對象即可,下面看代碼吧
    2014-01-01
  • Java中ArrayList與順序表的定義與實現(xiàn)方法

    Java中ArrayList與順序表的定義與實現(xiàn)方法

    ArrayList是一個實現(xiàn)List接口的類,底層是動態(tài)類型順序表,本質(zhì)也就是數(shù)組,動態(tài)主要體現(xiàn)在它的擴(kuò)容機(jī)制,下面這篇文章主要給大家介紹了關(guān)于Java中ArrayList與順序表的定義與實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Java中的@PreAuthorize注解使用詳解

    Java中的@PreAuthorize注解使用詳解

    這篇文章主要介紹了Java中的@PreAuthorize注解使用詳解,@PreAuthorize注解會在方法執(zhí)行前進(jìn)行權(quán)限驗證,支持Spring EL表達(dá)式,它是基于方法注解的權(quán)限解決方案,需要的朋友可以參考下
    2023-10-10
  • Java中的base64編碼器

    Java中的base64編碼器

    這篇文章介紹了Java中的base64編碼器,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04

最新評論