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

MybatisPlus多表查詢及分頁查詢完整代碼

 更新時間:2024年08月19日 14:50:30   作者:華農第一蒟蒻  
這篇文章主要介紹了MybatisPlus多表查詢及分頁查詢完整代碼,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧

多表查詢

  • 實體類準備:在實體類中使用MyBatis-Plus的注解來映射數據庫表和字段。比如,@TableName、@TableField@TableId 注解用于標識實體類、字段以及主鍵。
  • 構建查詢條件:使用QueryWrapper類可以創(chuàng)建查詢條件方法,并指定聯合查詢條件。在條件中使用表的別名來指定字段,比如user.age 指的是 user 表中的 age 字段。
  • 執(zhí)行查詢:調用MyBatis-Plus提供的方法執(zhí)行查詢,比如selectList()selectPage()方法。

示例代碼

// 多表查詢示例
public List<UserVO> selectUserVOList() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("user.age", 18)
                .like("user.username", "Jack")
                .orderByDesc("user.id");
    return userMapper.selectUserVOList(queryWrapper);
}
// 自定義 SQL 查詢示例
@Select("SELECT u.id, u.username, a.address FROM user u INNER JOIN address a ON u.address_id = a.id WHERE u.age = #{age}")
List<UserAddressVO> selectUserAddressVOList(@Param("age") Integer age);
// 多表查詢示例
public List<UserVO> selectUserVOList() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("user.age", 18)
                .like("user.username", "Jack")
                .orderByDesc("user.id");
    return userMapper.selectUserVOList(queryWrapper);
}
// 自定義 SQL 查詢示例
@Select("SELECT u.id, u.username, a.address FROM user u INNER JOIN address a ON u.address_id = a.id WHERE u.age = #{age}")
List<UserAddressVO> selectUserAddressVOList(@Param("age") Integer age);

第一段段代碼使用了 QueryWrapper 來構建查詢條件。

  • queryWrapper.eq("user.age", 18) 表示篩選出 user 表中 age 字段值等于 18 的記錄。
    • eq 是“等于”的條件設置方法。
  • queryWrapper.like("user.username", "Jack") 表示篩選出 user 表中 username 字段值類似于 “Jack” 的記錄。
    • like 用于模糊匹配,這里會匹配包含 “Jack” 的用戶名。
  • queryWrapper.orderByDesc("user.id") 表示按照 user 表中 id 字段的值降序排列查詢結果。
    • orderByDesc 用于設置降序排序。

例如,如果在查詢用戶數據時使用了這些條件,那么最終得到的結果將是年齡為 18 歲、用戶名包含 “Jack” ,并且按照用戶 id 從大到小排序的數據。

第二段段代碼是一個在 MyBatis-Plus 中的自定義 SQL 查詢的示例。

  • @Select("SELECT u.id, u.username, a.address FROM user u INNER JOIN address a ON u.address_id = a.id WHERE u.age = #{age}"):這是一個 @Select 注解,用于定義一個自定義的 SQL 查詢語句。它表示從 user 表(表別名 u )和 address 表(表別名 a )進行內連接(INNER JOIN ),連接條件是 u.address_id = a.id ,并且篩選出 u.age 等于傳入參數 age 的記錄。#{age} 是一個占位符,用于接收實際傳入的參數值。
  • List<UserAddressVO> selectUserAddressVOList(@Param("age") Integer age):這定義了一個方法,返回類型是一個 List ,其中元素類型是 UserAddressVO 。方法名為 selectUserAddressVOList ,并且通過 @Param("age") 注解將傳入的參數 age 與 SQL 語句中的占位符 #{age} 進行關聯。

例如,如果傳入的 age 值為 20 ,那么這個查詢就會返回年齡為 20 歲的用戶的 idusername 以及對應的地址信息。

補充:

內連接(inner join)是SQL中最常見的連接類型之一,用于根據兩個表之間的共同值來合并數據。內連接返回兩個表中滿足連接條件的行,即返回兩個表中共同的行。
具體來說,內連接會根據連接條件(通常是兩個表之間的共同字段)將兩個表中符合條件的行進行匹配,并將匹配的結果作為輸出。如果某行在一個表中有匹配,但在另一個表中沒有匹配,那么這行數據將不會包含在內連接的結果中。
內連接通常使用INNER JOIN關鍵字來表示,語法形式如下:

SELECT 列名
FROM 表1
INNER JOIN 表2
ON 表1.共同字段 = 表2.共同字段;

在這個語句中,INNER JOIN表示進行內連接操作,ON關鍵字用于指定連接條件,即指定兩個表之間用于匹配的共同字段。
內連接是SQL中最常用的連接類型之一,用于從多個表中檢索相關數據,是數據查詢和分析中非常重要的操作。

分頁查詢

  • 準備分頁對象:MyBatis-Plus提供了Page類,用于封裝分頁查詢條件。你需要傳入頁碼和每頁查詢數量作為參數。
  • 構建分頁查詢條件:在查詢條件中指定需要查詢的條件,然后將分頁對象和查詢條件傳遞給selectPage()方法。
  • 執(zhí)行分頁查詢:調用selectPage()方法執(zhí)行分頁查詢,它會返回一個IPage對象,其中包含了查詢結果和分頁信息。

示例代碼

// 分頁查詢示例
public IPage<User> selectUserPage(Page<User> page) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", 18);
    return userMapper.selectPage(page, queryWrapper);
}
// 自定義分頁查詢示例
public IPage<User> selectUserPage(Page<User> page, Integer age) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", age);
    return userMapper.selectPage(page, queryWrapper);
}

第一段代碼:分頁查詢示例

public IPage<User> selectUserPage(Page<User> page) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", 18);
    return userMapper.selectPage(page, queryWrapper);
}
  • public IPage<User> selectUserPage(Page<User> page):這定義了一個公共方法,返回類型為 IPage<User>,表示分頁查詢的結果。方法名為 selectUserPage,并接收一個 Page<User> 類型的參數 page,用于設置分頁的相關信息(如當前頁碼、每頁條數等)。
  • QueryWrapper<User> queryWrapper = new QueryWrapper<>();:創(chuàng)建了一個用于構建查詢條件的 QueryWrapper 對象。
  • queryWrapper.eq("age", 18);:使用 eq 方法設置查詢條件,即篩選出年齡(age)等于 18 的用戶記錄。
  • return userMapper.selectPage(page, queryWrapper);:調用 userMapper 中的 selectPage 方法進行分頁查詢。將之前創(chuàng)建的分頁對象 page 和包含查詢條件的 queryWrapper 作為參數傳入,最終返回分頁查詢的結果。

第二段代碼:自定義分頁查詢示例

public IPage<User> selectUserPage(Page<User> page, Integer age) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("age", age);
    return userMapper.selectPage(page, queryWrapper);
}

這段代碼與第一段類似,但增加了一個參數 age 用于自定義年齡條件。

  • public IPage<User> selectUserPage(Page<User> page, Integer age):方法接收兩個參數,除了分頁對象 page ,還有一個整數類型的 age 參數,用于指定具體的年齡條件。
  • queryWrapper.eq("age", age);:這里將傳入的 age 參數值作為年齡的篩選條件。
  • 同樣通過 userMapper.selectPage(page, queryWrapper) 進行分頁查詢并返回結果。

例如,如果在第一段代碼中,假設每頁顯示 10 條數據,當前是第 2 頁,那么它會返回年齡為 18 歲的用戶數據,并且按照每頁 10 條,第 2 頁的規(guī)則進行分頁。

在第二段代碼中,如果傳入的 age 為 25 ,其他條件相同,那么會返回年齡為 25 歲的用戶數據的分頁結果。

補充:

在上述代碼中,Page<User> page 是一個用于分頁操作的對象,它具有以下幾個重要的屬性和功能:

  • current:表示當前要獲取的頁碼。頁碼從 1 開始計數。例如,如果 current 的值為 2 ,則表示要獲取的是第 2 頁的數據。
  • size:指定每頁顯示的記錄數量。例如,如果 size 的值為 10 ,則每頁將返回 10 條記錄。除了設置這兩個屬性來控制分頁的頁碼和每頁記錄數,Page 對象還可以用于獲取一些與分頁相關的其他信息,比如:
- 總記錄數:通過調用相關方法可以獲取整個查詢結果集的總記錄數。
- 總頁數:根據總記錄數和每頁記錄數,可以計算出總的頁數。
- 是否有上一頁和下一頁:可以判斷當前頁是否有前一頁或后一頁,以便在前端進行頁面導航的顯示控制。
  • 假設我們有一個數據庫表,其中總共有 50 條用戶記錄,并且設置 pagesize 為 10 :

  • 如果 current 為 1 ,則會獲取第 1 頁的 10 條記錄(記錄 1 - 10)。
  • 如果 current 為 3 ,則會獲取第 3 頁的 10 條記錄(記錄 21 - 30)。

這樣,通過靈活設置 page 對象的 currentsize 屬性,就可以實現對數據的分頁獲取和展示。

使用 Page 對象進行分頁查詢的完整代碼示例

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class PageExampleTest {
    @Autowired
    private UserMapper userMapper;  // 假設您有一個 UserMapper 接口
    @Test
    public void testPageQuery() {
        // 創(chuàng)建 Page 對象,設置當前頁碼為 2,每頁記錄數為 5
        Page<User> page = new Page<>(2, 5);
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // 可以添加其他查詢條件
        IPage<User> userIPage = userMapper.selectPage(page, queryWrapper);
/*在 MyBatis-Plus 中,`IPage` 是 MyBatis-Plus 自定義的用于表示分頁結果的接口。通過使用 `IPage` ,可以方便地獲取分頁相關的信息,如總記錄數、當前頁數據、每頁記錄數、當前頁碼、總頁數等。*/
        // 獲取總記錄數
        long total = userIPage.getTotal();
        // 獲取當前頁數據列表
        List<User> userList = userIPage.getRecords();
        // 獲取當前頁碼
        int currentPage = userIPage.getCurrent();
        // 獲取每頁記錄數
        int pageSize = userIPage.getSize();
        // 獲取總頁數
        int totalPages = userIPage.getPages();
        System.out.println("總記錄數: " + total);
        System.out.println("當前頁數據列表: " + userList);
        System.out.println("當前頁碼: " + currentPage);
        System.out.println("每頁記錄數: " + pageSize);
        System.out.println("總頁數: " + totalPages);
    }
}

到此這篇關于MybatisPlus多表查詢及分頁查詢的文章就介紹到這了,更多相關MybatisPlus多表查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java可重入鎖的實現示例

    Java可重入鎖的實現示例

    在java中,可重入鎖分為兩種,即synchronized鎖以及ReentrantLock及其實現,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • 解決SpringCloudStream整合Kafka,兩個通道對應同一個topic報錯的情況

    解決SpringCloudStream整合Kafka,兩個通道對應同一個topic報錯的情況

    文章指出通道需唯一對應topic,否則會報錯,因兩個通道共用一個topic導致綁定失敗,通過修改配置文件,為不同通道分配不同的topic解決
    2026-05-05
  • SpringBoot中集成Swagger2及簡單實用

    SpringBoot中集成Swagger2及簡單實用

    使用Swagger你只需要按照它的規(guī)范去定義接口及接口相關的信息,再通過Swagger衍生出來的一系列項目和工具,就可以做到生成各種格式的接口文檔,以及在線接口調試頁面等等,這篇文章主要介紹了SpringBoot中集成Swagger2,需要的朋友可以參考下
    2023-06-06
  • 一文講通Java為什么不支持多繼承原理

    一文講通Java為什么不支持多繼承原理

    這篇文章主要為大家介紹了java為什么不支持多繼承原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 解決springboot中自定義JavaBean返回的json對象屬性名稱大寫變小寫問題

    解決springboot中自定義JavaBean返回的json對象屬性名稱大寫變小寫問題

    開發(fā)過程中發(fā)現查詢返回的數據出現自定義的JavaBean的屬性值大小寫格式出現問題,導致前端無法接受到數據,目前有四種解決方法,根據大佬的經驗之談,前兩種是最簡單便捷的,后兩種是比較通用的方法,需要的朋友可以參考下
    2023-10-10
  • Java微信獲取用戶資料報錯48001解決辦法

    Java微信獲取用戶資料報錯48001解決辦法

    這篇文章主要介紹了Java微信獲取用戶資料報錯48001的解決辦法,這個問題大家在工作可能經常會遇到,文中通過示例代碼將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2025-09-09
  • Java超詳細講解多態(tài)的調用

    Java超詳細講解多態(tài)的調用

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量到底會指向哪個類的實例對象,該引用變量發(fā)出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定
    2022-05-05
  • java讀寫ini文件、FileOutputStream問題

    java讀寫ini文件、FileOutputStream問題

    這篇文章主要介紹了java讀寫ini文件、FileOutputStream問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot3整合Nacos?V2.3.2的詳細過程

    SpringBoot3整合Nacos?V2.3.2的詳細過程

    本文介紹了如何在?Spring?Boot?3.2.x?項目中整合?Nacos?2.3.2,包括依賴配置、Nacos?服務發(fā)現與動態(tài)配置的配置方法,通過整合?Nacos,Spring?Boot?應用可以實現高效的服務發(fā)現、動態(tài)配置管理以及分布式系統(tǒng)中的靈活擴展,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Java求余%操作引發(fā)的一連串故事

    Java求余%操作引發(fā)的一連串故事

    取模運算與取余運算兩個概念有重疊的部分但又不完全一致。主要的區(qū)別在于對負整數進行除法運算時操作不同。本文重點給大家介紹Java求余%操作引發(fā)的一連串故事,感興趣的朋友跟隨小編一起看看吧
    2021-05-05

最新評論

琼中| 云和县| 武邑县| 大姚县| 濮阳县| 鱼台县| 遵义市| 定边县| 禄劝| 银川市| 苏州市| 永兴县| 荣昌县| 铁岭市| 精河县| 伊吾县| 石林| 壤塘县| 海宁市| 庄河市| 宜良县| 枣庄市| 南通市| 武夷山市| 遵义县| 辉南县| 璧山县| 奎屯市| 吴桥县| 浦县| 察隅县| 抚顺市| 蕉岭县| 德阳市| 吉林省| 弋阳县| 余干县| 泗水县| 拜泉县| 临海市| 天全县|