首页 游戏 软件 资讯 排行榜 专题
首页
编程语言
MyBatis-Plus实现分页查询两种方案详解

MyBatis-Plus实现分页查询两种方案详解

热心网友
28
转载
2026-05-05

方案一:PageUtils 工具类分页(ThreadLocal 封装版)

1. 方案概述

在不少传统或存量项目中,你可能会遇到一个熟悉的“老朋友”:PageUtils.startPage()。这通常是项目内部统一封装的分页工具类,其底层基于 MyBatis-Plus 的分页插件。它的最大魅力在于,通过 ThreadLocal 技术存储分页参数,实现了对业务代码的“零侵入”。对于不希望动刀原有逻辑的场景,它往往是首选。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

MyBatis-Plus实现分页查询两种方案详解

2. 核心原理

  1. 当你在 Controller 层调用 startPage() 时,工具类会悄无声息地获取前端传来的页码和每页条数
  2. 随后,MyBatis-Plus 的分页拦截器会精准拦截后续的 SQL 执行,并自动拼接上 LIMIT 语句;
  3. 最终,查询返回的普通 List 集合,会被工具类自动“包装”成一个标准的分页结果集,返回给前端。

整个过程,Service 和 Mapper 层完全感知不到分页的存在,仿佛什么都没发生。

3. 适用场景

  • 项目已经存在一变钱成的、封装好的分页工具类。
  • 核心诉求是不改动原有的 Mapper 或 Service 层代码。
  • 追求快速实现分页功能,进行低成本的系统改造。

4. 完整代码示例

4.1 Controller 层

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import ja vax.annotation.Resource;
import ja va.util.List;

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

    @Resource
    private CaseDimensionContext caseDimensionContext;

    /**
     * 按范围查询案件聚合维度(账龄+批次号/被告)
     * 方案一:PageUtils 工具类分页
     */
    @GetMapping("/selectCaseDimensionByScope")
    public R selectCaseDimensionByScope(JusticeCaseDimensionQuery caseDimensionQuery) {
        // 1. 开启分页(核心:自动接收前端 page/pageSize 参数)
        PageUtils.startPage();
        
        // 2. 执行业务查询,返回普通 List 集合
        List justiceCaseDimensions = caseDimensionContext.selectCaseDimensionByScope(caseDimensionQuery);
        
        // 3. 工具类封装 List 为分页结果返回
        return R.page(justiceCaseDimensions);
    }
}

4.2 Service/Mapper 层

这里无需任何分页相关代码,保持原样,正常返回 List 集合即可。这正是该方案“无侵入性”的体现。

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

1. 方案概述

如果说方案一是“民间智慧”,那么 IPage(或其实现类 Page)就是 MyBatis-Plus 框架官方钦定的分页对象。它通过方法参数和返回值来显式传递分页信息,代码意图清晰,结构规范,是新项目启动时的标准答案。

2. 核心原理

  1. 前端传递的 page、pageSize 参数,会被 SpringMVC 自动绑定并封装成一个 Page 对象;
  2. 将这个 Page 对象作为参数传入查询方法,MyBatis-Plus 便会心领神会地进行分页查询;
  3. 方法直接返回 IPage 对象,其中总条数、总页数、当前页数据等分页要素一应俱全,无需二次封装。

3. 适用场景

  • 全新项目的开发,希望遵循官方最佳实践。
  • 需要清晰、明确的分页参数传递路径,便于代码阅读和维护。
  • 追求极简的代码结构,降低长期的维护成本。

4. 完整代码示例

4.1 Controller 层(业务接口)

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 ja vax.annotation.Resource;

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

    @Resource
    private CaseDimensionContext caseDimensionContext;

    /**
     * 按范围查询案件聚合维度(账龄+批次号/被告)
     * 方案二:原生 IPage 分页(官方推荐)
     */
    @GetMapping("/selectCaseDimensionByScope")
    public R> selectCaseDimensionByScope(
            // 分页参数:自动接收 page、pageSize
            Page page,
            JusticeCaseDimensionQuery caseDimensionQuery
    ) {
        // 1. 直接传入 Page 对象,返回 IPage 分页结果
        IPage pageResult = caseDimensionContext.selectCaseDimensionByScope(page, caseDimensionQuery);
        
        // 2. 直接返回原生分页对象
        return R.ok(pageResult);
    }
}

4.2 Service 层

/**
 * Service 层方法
 */
public IPage selectCaseDimensionByScope(Page page, JusticeCaseDimensionQuery query) {
    // 调用 Mapper,直接返回 IPage
    return baseMapper.selectCaseDimensionByScope(page, query);
}

4.3 Mapper 层

/**
 * Mapper 层方法
 */
IPage selectCaseDimensionByScope(Page page, @Param("query") JusticeCaseDimensionQuery query);

三、两种分页方案核心对比

对比维度 PageUtils 工具类分页 原生 IPage 分页
官方推荐度 非官方,项目自定义封装 ✅ MyBatis-Plus 官方标准
代码侵入性 无侵入,无需修改原有接口 轻度侵入,需传入 Page 对象
代码简洁度 需手动开启分页 + 封装结果 一步到位,代码极简
分页信息 工具类自动封装 自带完整分页信息(总条数 / 总页数)
适用项目 老项目、存量系统改造 新项目、标准化开发
学习成本 低(直接调用工具方法) 低(原生对象,无额外学习)

四、最佳实践建议

  1. 新项目优先使用原生 IPage 分页:这是框架的“亲儿子”,符合官方规范,代码结构清晰,长期维护和团队协作成本更低。
  2. 老项目保留 PageUtils 分页:对于存量系统,这种无侵入式的方案能最大程度保持代码稳定,避免牵一发而动全身的改造风险。
  3. 统一项目规范是关键:无论选择哪种,在一个项目内部务必保持统一。混合使用两种风格,只会让代码库变得难以理解和维护。
来源:https://www.jb51.net/program/362328ttu.htm
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

35 天最强续航荣耀手表 6 Plus 官宣开启预售
业界动态
35 天最强续航荣耀手表 6 Plus 官宣开启预售

荣耀手表 6 Plus 开启预售:35天超长续航,定义专业运动与健康守护新标杆 4月30日,荣耀旗下基于赛车元素设计的最新智能穿戴设备——荣耀手表 6 Plus,正式在全渠道开启预售。即日起预约,即可享受包含购机优惠、丰富赠品在内的八大专属权益。新品提供了飞驰蓝、暮光棕、暗影黑和赛装灰四款全新配色,

热心网友
04.30
荣耀手表6 Plus曝光圆形表盘与超长续航
科技数码
荣耀手表6 Plus曝光圆形表盘与超长续航

荣耀手表6 Plus爆料:续航惊喜,健康与运动能力再进化 数码圈近日传来新消息。据知名爆料博主@数码闲聊站透露,荣耀或将在5月迎来新款智能手表——荣耀手表 6 Plus。有意思的是,此前在机器人半程马拉松中夺冠的荣耀机器人“闪电”似乎已经提前上手,从曝光的轮廓来看,新品依然采用了经典的圆形表盘设计。

热心网友
04.29
Qwen3.6-Plus需要多大显存?本地化部署的硬件选
业界动态
Qwen3.6-Plus需要多大显存?本地化部署的硬件选

Qwen3 6-Plus本地部署:显存需求的精算逻辑 在通义千问的家族里,Qwen3 6-Plus是个颇为特殊的存在。它以中等体量的参数规模,却瞄准了高阶的逻辑推理与代码生成能力,目标直指上一代的超大模型。这种“小而强”的定位,让它迅速成为许多开发者和企业关注的焦点。不过,想把这份“算力”搬回自己的

热心网友
04.29
SumPlus与Cottonia联手实现AI与DeFi的创新融合
web3.0
SumPlus与Cottonia联手实现AI与DeFi的创新融合

在当今数字金融领域,人工智能与去中心化金融(DeFi)的结合正在重塑用户体验 数字金融的格局正在悄然改变。你猜怎么着?当AI的智能遇上DeFi的去中心化,一场关于用户体验的革新已经拉开序幕。最近,SumPlus与Cottonia AI的战略合作,就是一个绝佳的信号。这意味着,未来的DeFi平台将不再

热心网友
04.27
京东物流“独狼”六代Plus版亮相:货箱扩容、智驾升级,未来5年将投100万台
科技数码
京东物流“独狼”六代Plus版亮相:货箱扩容、智驾升级,未来5年将投100万台

京东物流发布“独狼”第六代智能配送车Plus版,末端物流进入高效智能新阶段 在刚刚落幕的第十六届中国国际道路交通安全产品博览会上,京东物流带来了一款重磅新品——“独狼”第六代智能配送车Plus版。这款达到L4级别的自动驾驶无人配送车,不仅在“肚量”上做了大幅扩容,其智能化内核也迎来了全面革新。可以说

热心网友
04.25

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

冬季防火标语
职业与学业
冬季防火标语

构筑消防安全“防火墙”工程 提升全社会火灾防控综合能力 消防安全绝非一句空洞的口号,它直接关系到千家万户的生命财产安全,是社会稳定与经济发展的坚实保障。全面提升社会火灾防控水平,是一项需要全民参与、持续发力的系统性工程。以下汇集自不同领域的防火警示与实用提醒,为我们提供了直观而深刻的行动指南。 森林

热心网友
05.05
防火宣传标语(80条)
职业与学业
防火宣传标语(80条)

防火宣传标语(1-20) 1 全民总动员,防火保安全。 2 全民护林、人人防火。 3 一人把关一处安,众人防火稳如山。 4 时时注意森林防火、人人重视森林防火。 5 森林防火记心上,人人护林理应当。 6 山田年年耕、防火天天讲。 7 保护消防设施,维护消防安全。 8 入山不带烟、野外

热心网友
05.05
森林防火标语手抄报图片文案
职业与学业
森林防火标语手抄报图片文案

森林防火标语手抄报图片文案 “坚持生态效益、经济效益、社会效益相结合,突出生态效益。”这句话点明了现代林业发展的核心。如今信息传播触手可及,我们每天都能接触到海量内容,其中那些简洁有力、直击人心的句子,往往最能留下深刻印象。你是否也有收集和分享精彩语句的习惯?下面整理的这份森林防火标语集锦,或许能为

热心网友
05.05
欧交易所最新版app下载安装地址2025版
web3.0
欧交易所最新版app下载安装地址2025版

欧交易所作为全球领先的数字资产服务平台,为广大用户提供多样化的数字产品交易与金融服务。其官方应用程序设计友好,操作便捷,致力于为用户创造一个安全、稳定的交易环境。 这份指南将手把手带你完成欧交易所2025最新版App的官方下载与安装。文内提供的链接直达官方渠道,确保你的每一步操作都安全可靠。 下载教

热心网友
05.05
森林防火标语大全图片文案34句
职业与学业
森林防火标语大全图片文案34句

森林防火标语大全图片文案【篇1】 一棵树木长成参天大树,需要历经数十年的风雨洗礼,成长过程极为不易。请务必牢记,切勿让任何火源进入林区,共同守护这片绿色。 我们关心天下大事,更应心系家园安全,用行动联通守护的责任。 清明祭祖,如今更倡导以鲜花、植树等文明、环保的方式寄托哀思,摒弃焚烧纸钱旧俗,让清明

热心网友
05.05