亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

實(shí)現(xiàn)步驟

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

示例代碼

實(shí)體類定義

假設(shè)有兩個(gè)實(shí)體類:User 和 Order,我們想查詢用戶及其對(duì)應(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 中定義分頁(yè)查詢方法:

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 編寫(xiě)多表關(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)用分頁(yè)查詢

@Autowired
private UserMapper userMapper;

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

在調(diào)用此方法時(shí)傳入 Page 對(duì)象,MyBatis-Plus 會(huì)自動(dòng)處理分頁(yè)參數(shù)。

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

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

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

示例代碼

在 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)用分頁(yè)查詢:

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

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

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

示例代碼

定義查詢結(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)用分頁(yè)查詢

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

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

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

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

實(shí)現(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è)置分頁(yè)參數(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);
}

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

總結(jié)

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

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

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

相關(guān)文章

  • springboot從application.properties中注入list,?map方式

    springboot從application.properties中注入list,?map方式

    這篇文章主要介紹了springboot從application.properties中注入list,map方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Android bdflow數(shù)據(jù)庫(kù)神器的使用

    Android bdflow數(shù)據(jù)庫(kù)神器的使用

    這篇文章主要介紹了Android bdflow數(shù)據(jù)庫(kù)神器的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Spring Cloud @RefreshScope 原理及使用

    Spring Cloud @RefreshScope 原理及使用

    這篇文章主要介紹了Spring Cloud @RefreshScope 原理及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • vue+springboot上傳文件、圖片、視頻及回顯到前端詳解

    vue+springboot上傳文件、圖片、視頻及回顯到前端詳解

    一般來(lái)說(shuō)vue可以使用axios或者fetch等ajax庫(kù)發(fā)送文件請(qǐng)求,而springboot則可以使用Spring MVC的方式來(lái)處理上傳文件請(qǐng)求,下面這篇文章主要給大家介紹了關(guān)于vue+springboot上傳文件、圖片、視頻及回顯到前端的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 使用Java實(shí)現(xiàn)對(duì)兩個(gè)秒級(jí)時(shí)間戳相加

    使用Java實(shí)現(xiàn)對(duì)兩個(gè)秒級(jí)時(shí)間戳相加

    在現(xiàn)代應(yīng)用程序開(kāi)發(fā)中,時(shí)間戳的處理是一個(gè)常見(jiàn)需求,特別是當(dāng)我們需要對(duì)時(shí)間戳進(jìn)行運(yùn)算時(shí),比如時(shí)間戳的相加操作,本文我們將探討如何使用Java對(duì)兩個(gè)秒級(jí)時(shí)間戳進(jìn)行相加,并展示詳細(xì)的代碼示例和運(yùn)行結(jié)果,需要的朋友可以參考下
    2024-08-08
  • Java如何使用Optional與Stream取代if判空邏輯(JDK8以上)

    Java如何使用Optional與Stream取代if判空邏輯(JDK8以上)

    這篇文章主要給大家介紹了關(guān)于Java如何使用Optional與Stream取代if判空邏輯(JDK8以上)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • B/S與C/S架構(gòu)的區(qū)別介紹

    B/S與C/S架構(gòu)的區(qū)別介紹

    本文詳細(xì)講解了B/S與C/S架構(gòu)的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Spring詳細(xì)解讀事務(wù)管理

    Spring詳細(xì)解讀事務(wù)管理

    Spring事務(wù)的本質(zhì)就是對(duì)數(shù)據(jù)庫(kù)事務(wù)的支持,沒(méi)有數(shù)據(jù)庫(kù)事務(wù),Spring是無(wú)法提供事務(wù)功能的。Spring只提供統(tǒng)一的事務(wù)管理接口,具體實(shí)現(xiàn)都是由數(shù)據(jù)庫(kù)自己實(shí)現(xiàn)的,Spring會(huì)在事務(wù)開(kāi)始時(shí),根據(jù)當(dāng)前設(shè)置的隔離級(jí)別,調(diào)整數(shù)據(jù)庫(kù)的隔離級(jí)別,由此保持一致
    2022-04-04
  • Springboot整合https的實(shí)例代碼

    Springboot整合https的實(shí)例代碼

    本文簡(jiǎn)單介紹了一些密碼學(xué)的基礎(chǔ)和如何通過(guò)Springboot整合HTTPS,本文將通過(guò)實(shí)例代碼給大家詳細(xì)介紹整合過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Java Stream 流的使用過(guò)程解析

    Java Stream 流的使用過(guò)程解析

    這篇文章主要介紹了Java Stream 流的使用過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論