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

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的數據庫框架,在Service進行簡單的單表查詢時一般直接使用EntityWrapper的包裝類進行查詢,比較方便.

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

Service層查詢語句:

EntityWrapper<PayTiXianApplyEntity> ew=new EntityWrapper<PayTiXianApplyEntity>();
? ? ? ? ew.eq(Util.isNotEmpty(params.getState()), "STATE", params.getState())
? ? ? ? ? ? ? ? //state不為空,根據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);

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

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

原因

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

出錯的是這條語句:

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

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

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

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ā)現問題了吧!

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

解決方案

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

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

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

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

相關文章

  • Java 垃圾回收機制詳解(動力節(jié)點Java學院整理)

    Java 垃圾回收機制詳解(動力節(jié)點Java學院整理)

    在系統(tǒng)運行過程中,會產生一些無用的對象,這些對象占據著一定的內存,如果不對這些對象清理回收無用對象的內存,可能會導致內存的耗盡,所以垃圾回收機制回收的是內存。下面通過本文給大家詳細介紹java垃圾回收機制,一起學習吧
    2017-02-02
  • Java CAS底層實現原理實例詳解

    Java CAS底層實現原理實例詳解

    這篇文章主要介紹了Java CAS底層實現原理實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • spring bean.xml文件p標簽使用報錯的解決

    spring bean.xml文件p標簽使用報錯的解決

    這篇文章主要介紹了spring bean.xml文件p標簽使用報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 解決IDEA報錯java無效的目標發(fā)行版:22

    解決IDEA報錯java無效的目標發(fā)行版:22

    在使用IDEA編譯項目時,可能會遇到JDK版本不一致的錯誤,這篇文章主要介紹了解決IDEA報錯java無效的目標發(fā)行版:22的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • 全面解析Java設計模式之單例模式

    全面解析Java設計模式之單例模式

    這篇文章主要幫助大家全面解析Java設計模式之單例模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java求素數和最大公約數的簡單代碼示例

    Java求素數和最大公約數的簡單代碼示例

    這篇文章主要介紹了Java求素數和最大公約數的簡單代碼示例,其中作者創(chuàng)建的Fraction類可以用來進行各種分數運算,需要的朋友可以參考下
    2015-09-09
  • 使用Idea連接MySQL的詳細步驟總結

    使用Idea連接MySQL的詳細步驟總結

    今天給大家?guī)淼氖顷P于IDEA連接數據庫的問題,文章圍繞著使用Idea連接MySQL的詳細步驟展開,文中有非常詳細的介紹及圖文示例,需要的朋友可以參考下
    2021-06-06
  • java數據結構之搜索二叉樹

    java數據結構之搜索二叉樹

    這篇文章主要為大家詳細介紹了java數據結構之搜索二叉樹,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Mybatis in條件傳參的三種實現方式(直接$,List,[])

    Mybatis in條件傳參的三種實現方式(直接$,List,[])

    這篇文章主要介紹了Mybatis in條件傳參的三種實現方式(直接$,List,[]),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java 靜態(tài)數據初始化的示例代碼

    Java 靜態(tài)數據初始化的示例代碼

    這篇文章主要介紹了Java 靜態(tài)數據初始化的示例代碼,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09

最新評論

犍为县| 财经| 大理市| 翁源县| 泊头市| 西宁市| 绥江县| 虹口区| 建昌县| 金乡县| 五原县| 虹口区| 霸州市| 台湾省| 大理市| 湘乡市| 札达县| 蕲春县| 堆龙德庆县| 瑞安市| 沙湾县| 株洲市| 齐河县| 锡林浩特市| 拜泉县| 祁阳县| 镶黄旗| 锡林浩特市| 陇南市| 宝兴县| 开封市| 藁城市| 玉田县| 敦煌市| 宜丰县| 朝阳区| 弥勒县| 广德县| 沁阳市| 镇原县| 云南省|