深入淺出Mybatis Plus QueryWrapper

一、創建QueryWrapper對象

QueryWrapper是Mybatis Plus提供的一個查詢條件構造器,通過它可以靈活的構造相應的查詢條件來實現複雜查詢的功能。創建一個QueryWrapper的方式很簡單,只需要調用靜態方法QueryWrapper()即可:

QueryWrapper queryWrapper = new QueryWrapper();

其中,User是要查詢的實體類,通過泛型的方式來指定。創建好QueryWrapper對象之後,就可以開始按照自己的需求添加各種查詢條件了。

二、添加查詢條件

QueryWrapper提供了豐富的方法來添加各種查詢條件,這裡介紹幾種常用的方法。

1、eq方法

eq方法用來添加等於條件,例如:

queryWrapper.eq("name", "Jack");

表示查詢name等於”Jack”的記錄。

2、like方法

like方法用來添加模糊查詢條件,例如:

queryWrapper.like("name", "Jac");

表示查詢name包含”Jac”的記錄。

3、between方法

between方法用來添加區間查詢條件,例如:

queryWrapper.between("age", 18, 30);

表示查詢age在18到30之間的記錄。

4、in方法

in方法用來添加in查詢條件,例如:

queryWrapper.in("id", 1, 3, 5);

表示查詢id為1或3或5的記錄。

5、isNull和isNotNull方法

isNull和isNotNull方法用來添加空值查詢條件,例如:

queryWrapper.isNull("email");

表示查詢email為空的記錄。

6、orderBy方法

orderBy方法用來添加排序條件,例如:

queryWrapper.orderBy(true, true, "age");

表示按照age升序排序。

三、鏈式查詢

Mybatis Plus的QueryWrapper支持鏈式查詢,也就是在一個QueryWrapper對象上不斷添加多個查詢條件,例如:

queryWrapper.eq("name", "Jack")
            .like("email", "@test.com")
            .between("age", 18, 30)
            .orderBy(true, true, "age");

表示查詢name為”Jack”,email包含”@test.com”,age在18到30之間的記錄,並且按照age升序排序。

四、Lambda查詢

Mybatis Plus還提供了一種更加簡潔的查詢方式,即通過Lambda表達式來構造查詢條件。Lambda表達式可以用來指定查詢實體中某些欄位的值,例如:

LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper()
                .eq(User::getName, "Jack")
                .like(User::getEmail, "@test.com")
                .between(User::getAge, 18, 30)
                .orderBy(true, true, User::getAge);

表示查詢name為”Jack”,email包含”@test.com”,age在18到30之間的記錄,並且按照age升序排序。通過Lambda表達式,我們可以直接指定實體類中的屬性,不需要再通過字元串來指定欄位名,避免了因為拼寫錯誤等問題而導致的查詢失敗。

五、高級查詢

1、查詢中使用子查詢

在QueryWrapper中也可以使用子查詢來實現更加複雜的查詢。例如,我們可以通過下面的方式來查詢user_id在一個子查詢中查出的記錄:

QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.inSql("user_id", "select id from user where age < 20");

其中,inSql方法用來添加一個IN語句,需要傳入一個子查詢的SQL語句。

2、查詢結果映射到Dto

有時候,我們想要將查詢結果映射到一個自定義的Dto對象中,可以通過以下方式實現:

QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.lambda()
        .eq(User::getName, "Jack")
        .select(User::getName, User::getEmail, User::getAge)
        .last("limit 1");

List userDtoList = userMapper.selectObjs(queryWrapper).stream()
        .map(obj -> BeanUtil.toBean(obj, UserDto.class))
        .collect(Collectors.toList());

其中,select方法用來指定需要查詢的欄位,last方法用來添加where語句之後的部分,這裡是添加limit 1。最後通過selectObjs方法查詢出結果後,將每一個結果對象轉換成Dto對象。

六、總結

至此,我們對Mybatis Plus中的QueryWrapper做了一個全面的介紹,包括創建對象、添加查詢條件、鏈式查詢、Lambda查詢、高級查詢等方面。QueryWrapper可以幫助我們靈活構造相應的查詢條件,在查詢數據時提高我們的效率和準確性。

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

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

相關推薦

  • 理解Mybatis中的SQL Limit用法

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

    編程 2025-04-29
  • Mybatis-plus條件構造器

    一、可重用性 Mybatis-plus作為Mybatis的擴展工具,提供了豐富的功能讓開發更加高效便捷。其中之一的條件構造器可以幫助我們構建各種查詢條件,而且支持鏈式調用,非常適合…

    編程 2025-04-25
  • Mybatis中update if詳解

    一、if標籤的基本用法 在Mybatis中使用update語句更新資料庫表中的一條或多條數據,我們通常通過if標籤來動態生成update語句。if標籤的使用方法如下: <up…

    編程 2025-04-25
  • 深入淺出統計學

    統計學是一門關於收集、分析、解釋和呈現數據的學科。它在各行各業都有廣泛應用,包括社會科學、醫學、自然科學、商業、經濟學、政治學等等。深入淺出統計學是指想要學習統計學的人能夠理解統計…

    編程 2025-04-25
  • Mybatis批量插入操作

    一、基本概念 Mybatis是一種基於java的持久層框架,旨在幫助開發人員簡化資料庫操作。該框架提供了多種方式來執行資料庫操作,其中包括批量插入。批量插入是一種在單個事務中提交多…

    編程 2025-04-25
  • MyBatis如何防止SQL注入

    MyBatis是一款開源的持久層框架,它可以簡化Java應用程序中的數據持久化過程,並提供了許多有用的功能。然而,安全問題一直是Web應用程序的一大挑戰,其中最嚴重的問題之一是SQ…

    編程 2025-04-25
  • 深入淺出torch.autograd

    一、介紹autograd torch.autograd 模塊是 PyTorch 中的自動微分引擎。它支持任意數量的計算圖,可以自動執行前向傳遞、後向傳遞和計算梯度,同時提供很多有用…

    編程 2025-04-24
  • Mybatis-plus 日誌詳解

    一、日誌框架概述 1、什麼是日誌框架 日誌框架是一個用於管理日誌的工具,使用日誌框架可以幫助開發人員記錄程序運行時產生的信息、警告和錯誤消息。常用的日誌框架有log4j和logba…

    編程 2025-04-24
  • 深入淺出SQL佔位符

    一、什麼是SQL佔位符 SQL佔位符是一種佔用SQL語句中某些值的標記或佔位符。當執行SQL時,將使用該標記替換為實際的值,並將這些值傳遞給查詢。SQL佔位符使查詢更加安全,防止S…

    編程 2025-04-24
  • 深入淺出ThinkPHP框架

    一、簡介 ThinkPHP是一款開源的PHP框架,它遵循Apache2開源協議發布。ThinkPHP具有快速的開發速度、簡便的使用方式、良好的擴展性和豐富的功能特性。它的核心思想是…

    編程 2025-04-24

發表回復

登錄後才能評論