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

MyBatis-Plus實現(xiàn)分頁查詢兩種方案詳解

 更新時間:2026年04月17日 08:58:32   作者:暗暗別做白日夢  
這篇文章主要為大家詳細介紹了兩種MyBatis-Plus分頁實現(xiàn)方案,分別是PageUtils工具類分頁和MyBatis-Plus原生IPage分頁,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

方案一:PageUtils 工具類 分頁(ThreadLocal 封裝版)

1. 方案概述

PageUtils.startPage() 是項目統(tǒng)一封裝的分頁工具類,基于 MyBatis-Plus 分頁插件實現(xiàn),通過 ThreadLocal 存儲分頁參數(shù),對業(yè)務代碼無侵入,是傳統(tǒng)項目 / 老項目最常用的分頁方式。

2. 核心原理

  1. 調(diào)用 startPage() 后,工具類自動獲取前端傳遞的頁碼、每頁條數(shù);
  2. MyBatis-Plus 分頁插件攔截 SQL,自動拼接 LIMIT 分頁語法;
  3. 執(zhí)行查詢返回 List 集合,工具類自動封裝成分頁結(jié)果集。

3. 適用場景

  • 項目已統(tǒng)一封裝分頁工具類
  • 不希望修改 Mapper/Service 層原有代碼
  • 快速實現(xiàn)分頁,低成本改造

4. 完整代碼示例

4.1 Controller 層

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;

/**
 * 案件維度管理 Controller
 */
@RestController
@RequestMapping("/justice/case/dimension")
public class JusticeCaseDimensionController {

    @Resource
    private CaseDimensionContext caseDimensionContext;

    /**
     * 按范圍查詢案件聚合維度(賬齡+批次號/被告)
     * 方案一:PageUtils 工具類分頁
     */
    @GetMapping("/selectCaseDimensionByScope")
    public R<JusticeCaseDimension> selectCaseDimensionByScope(JusticeCaseDimensionQuery caseDimensionQuery) {
        // 1. 開啟分頁(核心:自動接收前端 page/pageSize 參數(shù))
        PageUtils.startPage();
        
        // 2. 執(zhí)行業(yè)務查詢,返回普通 List 集合
        List<JusticeCaseDimension> justiceCaseDimensions = caseDimensionContext.selectCaseDimensionByScope(caseDimensionQuery);
        
        // 3. 工具類封裝 List 為分頁結(jié)果返回
        return R.page(justiceCaseDimensions);
    }
}

4.2 Service/Mapper 層

無需任何分頁相關代碼,正常返回 List 即可。

二、方案二:MyBatis-Plus 原生 IPage 分頁(官方推薦)

1. 方案概述

IPage/Page 是 MyBatis-Plus 官方原生提供的分頁對象,直接通過方法入?yún)?/ 返回值實現(xiàn)分頁,代碼更簡潔、規(guī)范,是新項目首選方案。

2. 核心原理

  1. 前端傳遞分頁參數(shù)(page、pageSize),SpringMVC 自動封裝為 Page 對象;
  2. Page 對象傳入查詢方法,MyBatis-Plus 自動完成分頁查詢;
  3. 直接返回 IPage 對象,自帶總條數(shù)、總頁數(shù)、當前頁數(shù)據(jù)等完整分頁信息。

3. 適用場景

  • 新項目開發(fā)、遵循官方規(guī)范
  • 需要清晰的分頁參數(shù)傳遞
  • 簡化代碼結(jié)構,降低維護成本

4. 完整代碼示例

4.1 Controller 層(業(yè)務接口)

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;

/**
 * 案件維度管理 Controller
 */
@RestController
@RequestMapping("/justice/case/dimension")
public class JusticeCaseDimensionController {

    @Resource
    private CaseDimensionContext caseDimensionContext;

    /**
     * 按范圍查詢案件聚合維度(賬齡+批次號/被告)
     * 方案二:原生 IPage 分頁(官方推薦)
     */
    @GetMapping("/selectCaseDimensionByScope")
    public R<IPage<JusticeCaseDimension>> selectCaseDimensionByScope(
            // 分頁參數(shù):自動接收 page、pageSize
            Page<JusticeCaseDimension> page,
            JusticeCaseDimensionQuery caseDimensionQuery
    ) {
        // 1. 直接傳入 Page 對象,返回 IPage 分頁結(jié)果
        IPage<JusticeCaseDimension> pageResult = caseDimensionContext.selectCaseDimensionByScope(page, caseDimensionQuery);
        
        // 2. 直接返回原生分頁對象
        return R.ok(pageResult);
    }
}

4.2 Service 層

/**
 * Service 層方法
 */
public IPage<JusticeCaseDimension> selectCaseDimensionByScope(Page<JusticeCaseDimension> page, JusticeCaseDimensionQuery query) {
    // 調(diào)用 Mapper,直接返回 IPage
    return baseMapper.selectCaseDimensionByScope(page, query);
}

4.3 Mapper 層

/**
 * Mapper 層方法
 */
IPage<JusticeCaseDimension> selectCaseDimensionByScope(Page<JusticeCaseDimension> page, @Param("query") JusticeCaseDimensionQuery query);

三、兩種分頁方案核心對比

對比維度PageUtils 工具類分頁原生 IPage 分頁
官方推薦度非官方,項目自定義封裝? MyBatis-Plus 官方標準
代碼侵入性無侵入,無需修改原有接口輕度侵入,需傳入 Page 對象
代碼簡潔度需手動開啟分頁 + 封裝結(jié)果一步到位,代碼極簡
分頁信息工具類自動封裝自帶完整分頁信息(總條數(shù) / 總頁數(shù))
適用項目老項目、存量系統(tǒng)改造新項目、標準化開發(fā)
學習成本低(直接調(diào)用工具方法)低(原生對象,無額外學習)

四、最佳實踐建議

  1. 新項目優(yōu)先使用 原生 IPage 分頁:符合官方規(guī)范,代碼更易維護,團隊協(xié)作成本更低;
  2. 老項目保留 PageUtils 分頁:無需大規(guī)模改造代碼,兼容現(xiàn)有業(yè)務邏輯;
  3. 統(tǒng)一項目規(guī)范:一個項目中只使用一種分頁方案,避免代碼風格混亂。

到此這篇關于MyBatis-Plus實現(xiàn)分頁查詢兩種方案詳解的文章就介紹到這了,更多相關MyBatis-Plus分頁查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Java中格式化日期的DateFormat與SimpleDateFormat類

    詳解Java中格式化日期的DateFormat與SimpleDateFormat類

    DateFormat其本身是一個抽象類,SimpleDateFormat 類是DateFormat類的子類,一般情況下來講DateFormat類很少會直接使用,而都使用SimpleDateFormat類完成,下面我們具體來看一下兩個類的用法:
    2016-05-05
  • OpenFeign無法遠程調(diào)用問題及解決

    OpenFeign無法遠程調(diào)用問題及解決

    文章介紹了在使用Feign客戶端時遇到的讀超時問題,并分析了原因是系統(tǒng)啟動時未先加載Nacos配置,為了解決這個問題,建議將Nacos配置放在`bootstrap.yml`文件中,以便項目啟動時優(yōu)先加載Nacos配置
    2024-11-11
  • Java實現(xiàn)石頭剪刀布小游戲

    Java實現(xiàn)石頭剪刀布小游戲

    這篇文章主要為大家詳細介紹了Java實現(xiàn)石頭剪刀布小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 詳解Spring Boot中MyBatis的使用方法

    詳解Spring Boot中MyBatis的使用方法

    mybatis初期使用比較麻煩,需要各種配置文件、實體類、dao層映射關聯(lián)、還有一大推其它配置。當然mybatis也發(fā)現(xiàn)了這種弊端。下面通過本文給大家詳細介紹Spring Boot中MyBatis的使用方法,感興趣的朋友一起看看吧
    2017-07-07
  • java實現(xiàn)批量下載 多文件打包成zip格式下載

    java實現(xiàn)批量下載 多文件打包成zip格式下載

    這篇文章主要為大家詳細介紹了java實現(xiàn)批量下載、將多文件打包成zip格式下載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 關于notify()和notifyAll()方法的用法與區(qū)別

    關于notify()和notifyAll()方法的用法與區(qū)別

    本文詳細解釋了Java中`notify()`和`notifyAll()`的區(qū)別,前者喚醒一個等待線程,后者喚醒所有等待線程,并提供了示例代碼,展示了`notify()`和`notifyAll()`在實際使用中的效果
    2026-04-04
  • java中如何判斷數(shù)組中是否包含某個元素的幾種方法

    java中如何判斷數(shù)組中是否包含某個元素的幾種方法

    相信大家在操作Java的時候,經(jīng)常會要檢查一個數(shù)組(無序)是否包含一個特定的值,這篇文章主要給大家介紹了關于java中如何判斷數(shù)組中是否包含某個元素的幾種方法,需要的朋友可以參考下
    2024-08-08
  • SpringBoot異步實現(xiàn)的8種方式

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

    異步執(zhí)行對于開發(fā)者來說并不陌生,在實際的開發(fā)過程中,很多場景多會使用到異步,本文主要介紹了SpringBoot異步實現(xiàn)的8種方式,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 詳解 Java繼承關系下的構造方法調(diào)用

    詳解 Java繼承關系下的構造方法調(diào)用

    這篇文章主要介紹了詳解 Java繼承關系下的構造方法調(diào)用的相關資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Java并發(fā)編程之ReentrantLock解析

    Java并發(fā)編程之ReentrantLock解析

    這篇文章主要介紹了Java并發(fā)編程之ReentrantLock解析,ReentrantLock內(nèi)容定義了一個抽象類Sync,繼承自AQS,而不是自己去繼承AQS,所有對ReentrantLock的操作都會轉(zhuǎn)化為對Sync的操作,需要的朋友可以參考下
    2023-12-12

最新評論

凉山| 普兰店市| 信阳市| 洛扎县| 鄂伦春自治旗| 来宾市| 邓州市| 嵩明县| 安国市| 曲松县| 龙门县| 陇川县| 淳化县| 盱眙县| 和龙市| 安国市| 亚东县| 龙口市| 灵丘县| 张北县| 准格尔旗| 湘乡市| 灵宝市| 定远县| 同德县| 留坝县| 万载县| 内丘县| 元朗区| 外汇| 托里县| 巧家县| 民权县| 丹凤县| 闵行区| 印江| 三明市| 米脂县| 榆社县| 合作市| 成武县|