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

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

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

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

1. 方案概述

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

2. 核心原理

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

3. 適用場(chǎng)景

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

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;

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

4.2 Service/Mapper 層

無(wú)需任何分頁(yè)相關(guān)代碼,正常返回 List 即可。

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

1. 方案概述

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

2. 核心原理

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

3. 適用場(chǎng)景

  • 新項(xiàng)目開(kāi)發(fā)、遵循官方規(guī)范
  • 需要清晰的分頁(yè)參數(shù)傳遞
  • 簡(jiǎn)化代碼結(jié)構(gòu),降低維護(hù)成本

4. 完整代碼示例

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

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;

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

三、兩種分頁(yè)方案核心對(duì)比

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

四、最佳實(shí)踐建議

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

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

相關(guān)文章

  • 詳解Java中格式化日期的DateFormat與SimpleDateFormat類(lèi)

    詳解Java中格式化日期的DateFormat與SimpleDateFormat類(lèi)

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

    OpenFeign無(wú)法遠(yuǎn)程調(diào)用問(wèn)題及解決

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

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

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

    詳解Spring Boot中MyBatis的使用方法

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

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

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

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

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

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

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

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

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

    詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用

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

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

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

最新評(píng)論

大邑县| 大连市| 个旧市| 桦川县| 遵化市| 安龙县| 永兴县| 荃湾区| 杭锦后旗| 凤山县| 玉屏| 历史| 芷江| 孟津县| 墨脱县| 神池县| 栾城县| 盘锦市| 建阳市| 威宁| 大埔区| 宁明县| 建阳市| 正定县| 会理县| 龙南县| 邓州市| 洛南县| 惠来县| 安阳县| 新绛县| 广昌县| 云阳县| 无极县| 婺源县| 城市| 溧阳市| 兰西县| 连州市| 北宁市| 临武县|