当前位置:

首页 > 编程开发 > MyBatis-Plus实现分页查询两种方案详解

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

方案一:PageUtils 工具类分页(ThreadLocal 封装版) 1. 方案概述 在不少传统或存量项目中,你可能会遇到一个熟悉的“老朋友”:PageUtils.startPage()。这通常是项目内部统一封装的分页工具类,其底层基于 MyBatis-Plus 的分页插件。它的最大魅力在于,通

本文目录

    方案一: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. 统一项目规范是关键:无论选择哪种,在一个项目内部务必保持统一。混合使用两种风格,只会让代码库变得难以理解和维护。
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    联想 Tab Plus Gen 2 平板海外开售:12.1 英寸屏幕、JBL 九单元扬声器
    联想 Tab Plus Gen 2 平板海外开售:12.1 英寸屏幕、JBL 九单元扬声器

    联想TabPlusGen2海外上市,12.1英寸2.5K120HzIPS屏,天玑7400芯片,后盖集成JBL九单元扬声器及杜比全景声,圆形支架可自立,内置10200mAh电池+45W快充,预装Android16,8+128GB约3367元。

    酷态科6月24日推出神秘新品,有望为“CP模块风扇Plus”底座
    酷态科6月24日推出神秘新品,有望为“CP模块风扇Plus”底座

    酷态科6月24日将推出CP模块风扇Plus磁吸底座,通过Power-Pin接口使风扇支持充放电。风扇搭载30000RPM无刷电机,风速11m/s,内置双5000mAh电池,续航37小时,支持33W快充。

    酷态科官宣 6 月 24 日推出神秘新品,有望为“CP 模块风扇 Plus”桌面底座
    酷态科官宣 6 月 24 日推出神秘新品,有望为“CP 模块风扇 Plus”桌面底座

    酷态科6月24日将推出神秘新品,有望为CP模块风扇Plus的桌面底座。该风扇采用30000RPM电机,风速达11m/s,内置两块5000mAh电池,续航37小时,支持充放电及主流快充协议。新品或使风扇兼具吹风与充电功能。

    首创“证据锚定”技术,百川智能发布 M3 Plus
    首创“证据锚定”技术,百川智能发布 M3 Plus

    百川智能发布医疗大模型Baichuan-M3Plus,事实性幻觉率降至2.6%,创下全球最低纪录。首创“证据锚定”技术,实现医学结论可验证、可追溯。多项国际评测中超越GPT-5.2等领先模型,API调用成本较前代下降70%,性能表现卓越,堪称行业里程碑。

    联想Tab Plus 2代发布:9扬声器+10200mAh大电池
    联想Tab Plus 2代发布:9扬声器+10200mAh大电池

    联想TabPlus2代在韩国发布,搭载联发科天玑7400芯片,12.1英寸120Hz600尼特屏幕,9个JBL扬声器支持杜比全景声和蓝牙音箱模式。内置10200mAh电池,预装安卓16,承诺升级至安卓18。配备联想AI实时转写、智能阅读和AI笔记等功能。

    戴尔推出2026款灵越Plus 16英寸笔记本,7004元起
    戴尔推出2026款灵越Plus 16英寸笔记本,7004元起

    全新戴尔2026款灵越Plus16英寸笔记本正式发布,其搭载酷睿Ultra5-225U处理器,性能强劲,起售价为7004元,可享受国家补贴后最低仅需5698元。机身重1.94千克,配备1920×1200分辨率60HzIPS屏幕,接口含雷电4、HDMI2.1和RJ45网口,且扩展性强,非常适合办公与学习。

    券后184.3元,酷态科CP模块风扇Plus曜石黑配色开售
    券后184.3元,酷态科CP模块风扇Plus曜石黑配色开售

    酷态科今天正式开售了CP模块风扇Plus的「曜石黑」版本,定价199元。电商平台上的券后价格大概在184.3元,有兴趣的可以留意一下。 这款新品最大的亮点就是模块化可扩展设计,内部搭载一颗30000 RPM的新一代高速三相无刷电机,技术原理和高速吹风机用的电机类似。实测风速最高能到11m/s,配合T

    券后 184.3 元,酷态科 CP 模块风扇 Plus 曜石黑配色开售
    券后 184.3 元,酷态科 CP 模块风扇 Plus 曜石黑配色开售

    酷态科CP模块风扇Plus曜石黑配色正式开售,到手价仅184.3元。搭载30000RPM高速三相无刷电机与涡流增压技术,最大风速可达11m/s。内置两块5000mAh电池,续航时间长达37小时,支持33W输出及多种快充协议,还可当作移动电源使用。

    中兴畅行70 Plus手机发售:展锐T9100 + 8G + 256G售2099元
    中兴畅行70 Plus手机发售:展锐T9100 + 8G + 256G售2099元

    中兴畅行70Plus已正式发售,定价为两千零九十九元,搭载了展锐T9100处理器、8GB运存与256GB存储。配备了6.75英寸120Hz高刷新率LCD打孔屏,内置了6050mAh大容量电池并支持45W快充,后置了一千三百万像素主摄,还提供了AI键、红外遥控及无网通信功能。

    如何使用SQLPlus进行数据库管理
    如何使用SQLPlus进行数据库管理

    SQLPlus 是 Oracle 数据库的一个命令行工具,用于执行 SQL 查询、PL/SQL 程序以及管理数据库。以下是一些基本的 SQLPlus 命令和用法,用于数据库管理:开启SQLPlus:打开命令行界面(在Windows系统上为CMD或PowerShell,在Unix/Linux系统上为T

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。