Mybatis-Plus And Or查詢詳解

一、基本概念

Mybatis和Mybatis-Plus都是在進行Java程序和關係型數據庫交互時常用的工具,其中Mybatis-Plus是在Mybatis基礎上的再次封裝,提供了更高層次的抽象和便利。
And和Or是經典的邏輯比較符號,代表“並且”和“或者”,在對數據庫進行多條件查詢時,常常需要用到這兩個符號來聯合查詢。

二、And查詢

And查詢是指多個條件需要同時滿足的情況下進行的查詢。在Mybatis-Plus中,進行And查詢的方法是在查詢構造器中使用and方法來聯合多個條件。
以下是一個示例代碼:

    public List queryUser(String name, Integer age, String city) {
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
        queryWrapper.eq(User::getStatus, 1)
                    .like(StringUtils.isNotBlank(name), User::getName, name)
                    .eq(age != null, User::getAge, age)
                    .eq(StringUtils.isNotBlank(city), User::getCity, city);
        return userMapper.selectList(queryWrapper);
    }

代碼解釋:
我們使用QueryWrapper的LambdaQueryWrapper來進行查詢構造。通過and方法聯合了四個查詢條件:
1、getStatus為1,即過濾掉已刪除的用戶
2、判斷name是否非空,若非空則加入like查詢
3、判斷age是否為null,若不為null則加入eq查詢
4、判斷city是否非空,若非空則加入eq查詢
最後使用selectList方法將符合條件的User列表返回。

值得一提的是,在Mybatis-Plus中,我們可以在查詢構造中使用Lambda表達式或者方法引用來對查詢條件進行設置,可以更加高效便捷地完成查詢構造。

三、Or查詢

Or查詢是指多個條件中只需滿足其中一個條件即可進行查詢。在Mybatis-Plus中,進行Or查詢的方法是在查詢構造器中使用or方法來聯合多個條件。
以下是一個示例代碼:

    public List queryUser(String name, Integer age, String city) {
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
        queryWrapper.eq(User::getStatus, 1)
                    .and(i -> i.like(StringUtils.isNotBlank(name), User::getName, name)
                             .eq(age != null, User::getAge, age))
                    .or(i -> i.eq(StringUtils.isNotBlank(city), User::getCity, city));
        return userMapper.selectList(queryWrapper);
    }

代碼解釋:
相比於And查詢,這裡我們使用了LambdaQueryWrapper的and方法,將多個條件進行聯合,然後使用or方法進行組織。
具體地,我們查詢時需要滿足getStatus等於1,以及name等於指定值和age等於指定值中的一個;或者city等於指定值。這個查詢條件就使用了or方法來完成。

四、混合查詢

有時候,在查詢時既需要and又需要or,即需要進行混合查詢。在Mybatis-Plus中,混合查詢也是非常容易實現的,可以根據需求在查詢構造器中使用and/or方法來進行組合。

以下是一個示例代碼:

    public List queryUserByIdAndNameOrAge(Integer id, String name, Integer age) {
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.lambda().eq(User::getStatus, 1)
                    .and(i -> i.eq(User::getId, id)
                             .or()
                             .like(StringUtils.isNotBlank(name), User::getName, name))
                    .and(i -> i.eq(age != null, User::getAge, age));
        return userMapper.selectList(queryWrapper);
    }

代碼解釋:
代碼中我們需要查詢滿足以下條件的User:
1、getStatus等於1
2、滿足(id等於指定值且name等於指定值)或(name包含指定值)
3、滿足age等於指定值
整個查詢構造中使用了and/or方法的巧妙組合,實現了這一需求。

五、小結

Mybatis-Plus提供了非常方便的查詢構造功能,其中的and和or方法可以很容易地實現多條件的邏輯聯合。
在開發中,需要對不同的查詢進行需求分析,併合理地使用Mybatis-Plus提供的查詢構造,可以高效、便捷地完成複雜查詢,並提高工作效率和代碼可維護性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/269889.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:34
下一篇 2024-12-16 13:34

相關推薦

  • 理解Mybatis中的SQL Limit用法

    Mybatis是一種非常流行的ORM框架,提供了SQL映射配置文件,可以使用類似於傳統SQL語言的方式編寫SQL語句。其中,SQL的Limit語法是一個非常重要的知識點,能夠實現分…

    編程 2025-04-29
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25

發表回復

登錄後才能評論