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

Mybatisplus多表關(guān)聯(lián)分頁查詢多種實現(xiàn)方式

 更新時間:2025年03月14日 10:01:54   作者:techzhi  
本文主要介紹了Mybatisplus多表關(guān)聯(lián)分頁查詢多種實現(xiàn)方式,包括使用XML自定義SQL、Wrapper搭配自定義SQL、使用DTO與自定義SQL及結(jié)合PageHelper實現(xiàn)分頁查詢,感興趣的可以了解一下

在 MyBatis-Plus 中,雖然沒有直接支持多表關(guān)聯(lián)查詢的內(nèi)置方法,但可以通過以下幾種方式實現(xiàn)多表關(guān)聯(lián)分頁查詢:

1. 使用 MyBatis-Plus 配合 XML 自定義 SQL 實現(xiàn)多表關(guān)聯(lián)分頁查詢

這是最常用的方式,通過自定義 SQL 查詢可以實現(xiàn)較復(fù)雜的關(guān)聯(lián)查詢,結(jié)合 MyBatis-Plus 的 IPage 接口,可以實現(xiàn)分頁效果。

實現(xiàn)步驟

  • 定義查詢方法:在 Mapper 接口中定義分頁查詢方法。
  • 編寫 XML 查詢語句:在 Mapper XML 文件中編寫 SQL 查詢,包括分頁邏輯。
  • 調(diào)用分頁插件:在服務(wù)層調(diào)用分頁查詢方法。

示例代碼

實體類定義

假設(shè)有兩個實體類:User 和 Order,我們想查詢用戶及其對應(yīng)的訂單列表。

@Data
public class User {
    private Long id;
    private String name;
}

@Data
public class Order {
    private Long id;
    private Long userId;
    private String productName;
}

Mapper 接口定義

在 UserMapper 中定義分頁查詢方法:

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

public interface UserMapper extends BaseMapper<User> {
    IPage<User> selectUserOrders(Page<?> page, @Param("userId") Long userId);
}

Mapper XML 編寫多表關(guān)聯(lián)查詢

在 UserMapper.xml 中定義多表關(guān)聯(lián) SQL 查詢:

<select id="selectUserOrders" resultType="User">
    SELECT u.*, o.product_name
    FROM user u
    LEFT JOIN order o ON u.id = o.user_id
    WHERE u.id = #{userId}
</select>

Service 調(diào)用分頁查詢

@Autowired
private UserMapper userMapper;

public IPage<User> getUserOrders(Page<User> page, Long userId) {
    return userMapper.selectUserOrders(page, userId);
}

在調(diào)用此方法時傳入 Page 對象,MyBatis-Plus 會自動處理分頁參數(shù)。

Page&lt;User&gt; page = new Page&lt;&gt;(1, 10); // 分頁參數(shù):第1頁,每頁10條
IPage&lt;User&gt; result = userService.getUserOrders(page, 1L);

2. 使用 MyBatis-Plus 的 Wrapper 搭配 自定義 SQL 實現(xiàn)分頁查詢

可以通過 Wrapper 搭配 自定義 SQL 的方式實現(xiàn)關(guān)聯(lián)查詢并分頁。此方法靈活,但需要自行編寫 SQL 語句。

示例代碼

在 UserMapper 中定義查詢方法:

@Select("SELECT u.*, o.product_name " +
        "FROM user u LEFT JOIN order o ON u.id = o.user_id " +
        "WHERE u.id = #{userId}")
IPage<User> selectUserOrdersCustom(Page<?> page, @Param("userId") Long userId);

在 Service 層直接調(diào)用分頁查詢:

Page<User> page = new Page<>(1, 10); // 分頁參數(shù)
IPage<User> result = userMapper.selectUserOrdersCustom(page, 1L);

3. 使用 MyBatis-Plus 配合 Wrapper 和 關(guān)聯(lián)查詢 DTO 實現(xiàn)分頁查詢

使用 DTO(數(shù)據(jù)傳輸對象)作為查詢結(jié)果,將查詢到的字段映射到 DTO 中,減少數(shù)據(jù)庫字段和實體類的耦合。

示例代碼

定義查詢結(jié)果的 DTO 類

@Data
public class UserOrderDTO {
    private Long userId;
    private String userName;
    private String productName;
}

定義 UserMapper 的查詢方法

@Select("SELECT u.id AS userId, u.name AS userName, o.product_name AS productName " +
        "FROM user u LEFT JOIN order o ON u.id = o.user_id " +
        "WHERE u.id = #{userId}")
IPage&lt;UserOrderDTO&gt; selectUserOrderDTO(Page&lt;?&gt; page, @Param("userId") Long userId);

Service 調(diào)用分頁查詢

Page&lt;UserOrderDTO&gt; page = new Page&lt;&gt;(1, 10); // 分頁參數(shù)
IPage&lt;UserOrderDTO&gt; result = userMapper.selectUserOrderDTO(page, 1L);

通過 DTO,將分頁數(shù)據(jù)返回,避免直接使用實體類作為結(jié)果對象,可以增加查詢的靈活性和復(fù)用性。

4. 使用 MyBatis-Plus 與 PageHelper 配合實現(xiàn)多表關(guān)聯(lián)分頁查詢

雖然 MyBatis-Plus 自帶分頁插件,但在復(fù)雜的多表查詢中,也可以結(jié)合 PageHelper 使用分頁功能。

實現(xiàn)步驟

添加 PageHelper 依賴:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.13</version>
</dependency>

在查詢方法中調(diào)用 PageHelper.startPage() 設(shè)置分頁參數(shù)。

示例代碼

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

public PageInfo<UserOrderDTO> getUserOrdersPage(int pageNum, int pageSize, Long userId) {
    PageHelper.startPage(pageNum, pageSize);
    List<UserOrderDTO> list = userMapper.selectUserOrderList(userId);
    return new PageInfo<>(list);
}

通過 PageHelper.startPage(pageNum, pageSize); 配置分頁,然后使用 PageInfo 封裝返回結(jié)果,獲取分頁數(shù)據(jù)。

總結(jié)

實現(xiàn)方式優(yōu)點(diǎn)適用場景
XML 自定義 SQL靈活性高,可實現(xiàn)復(fù)雜的關(guān)聯(lián)查詢復(fù)雜 SQL 關(guān)聯(lián)查詢
Wrapper 自定義 SQL靈活性高,支持簡單關(guān)聯(lián)查詢簡單的多表關(guān)聯(lián)查詢
使用 DTO 與自定義 SQL減少實體類耦合,增加查詢靈活性需要返回特定字段的查詢
MyBatis-Plus + PageHelper 分頁查詢與 PageHelper 結(jié)合,可適應(yīng)復(fù)雜分頁場景復(fù)雜的關(guān)聯(lián)分頁查詢

通過以上方法,您可以根據(jù)項目的需求和復(fù)雜度選擇合適的多表關(guān)聯(lián)分頁查詢方式。

到此這篇關(guān)于Mybatisplus多表關(guān)聯(lián)分頁查詢多種實現(xiàn)方式的文章就介紹到這了,更多相關(guān)Mybatisplus多表關(guān)聯(lián)分頁查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中實現(xiàn)異步的六種方式

    SpringBoot中實現(xiàn)異步的六種方式

    在SpringBoot開發(fā)中,合理運(yùn)用多線程技術(shù)能顯著提升系統(tǒng)吞吐量與響應(yīng)速度,本文總結(jié)了6種在SpringBoot中實現(xiàn)多線程的技術(shù)方式,包括注解式異步、顯式線程池、CompletableFuture、事件監(jiān)聽、JDK原生線程池和異步定時任務(wù),每種方式都有其適用場景,需要的朋友可以參考下
    2026-03-03
  • Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決

    Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決

    這篇文章主要介紹了Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 如何查看java進(jìn)程gc情況

    如何查看java進(jìn)程gc情況

    這篇文章主要介紹了如何查看java進(jìn)程gc情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07
  • 淺談Springboot之于Spring的優(yōu)勢

    淺談Springboot之于Spring的優(yōu)勢

    這篇文章主要介紹了淺談Springboot之于Spring的優(yōu)勢,簡述了在Java EE開發(fā)中遇到的問題,言簡意賅,需要的朋友可以參考下。
    2017-09-09
  • Spring Boot 配置 Quartz 定時任務(wù)的方法

    Spring Boot 配置 Quartz 定時任務(wù)的方法

    這篇文章主要介紹了Spring Boot 配置 Quartz 定時任務(wù)的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • mybatis多對多查詢的實現(xiàn)(xml方式和注解方式)

    mybatis多對多查詢的實現(xiàn)(xml方式和注解方式)

    本文主要介紹了mybatis多對多查詢的實現(xiàn),有xml方式和注解方式兩種,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • java類中元素初始化順序詳解

    java類中元素初始化順序詳解

    對于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構(gòu)造器,它們的初始化順序依次是(靜態(tài)變量、靜態(tài)初始化塊)>(變量、初始化塊)>構(gòu)造器
    2013-08-08
  • Java獲取堆棧信息的三種方法小結(jié)

    Java獲取堆棧信息的三種方法小結(jié)

    在Java編程中,獲取堆棧信息對于調(diào)試和故障排除非常重要,Java提供了多種方式來獲取當(dāng)前線程的堆棧信息,下面就跟隨小編一起學(xué)習(xí)一下常用的三種吧
    2024-03-03
  • JAVA使用動態(tài)代理對象進(jìn)行敏感字過濾代碼實例

    JAVA使用動態(tài)代理對象進(jìn)行敏感字過濾代碼實例

    這篇文章主要介紹了JAVA使用動態(tài)代理對象進(jìn)行敏感字過濾代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • java中的除法運(yùn)算和取模運(yùn)算解讀

    java中的除法運(yùn)算和取模運(yùn)算解讀

    這篇文章主要介紹了java中的除法運(yùn)算和取模運(yùn)算,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

乌兰县| 新绛县| 沁阳市| 奉化市| 江山市| 普兰店市| 横山县| 共和县| 芮城县| 武功县| 江陵县| 台湾省| 崇义县| 麦盖提县| 正镶白旗| 克拉玛依市| 湛江市| 财经| 武功县| 蒙城县| 长垣县| 元谋县| 金昌市| 囊谦县| 江孜县| 玉门市| 宣恩县| 郑州市| 孝义市| 子洲县| 林周县| 定南县| 台中市| 改则县| 巴南区| 阜阳市| 中卫市| 仪征市| 深泽县| 龙岩市| 喀什市|