当前位置: 代码网 > it编程>编程语言>Java > MyBatis-Plus实现分页查询两种方案详解

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

2026年04月17日 Java 我要评论
方案一:pageutils 工具类分页(threadlocal封装版)1. 方案概述pageutils.startpage() 是项目统一封装的分页工具类,基于 mybatis-plus 分页插件实现

方案一:pageutils 工具类 分页(threadlocal 封装版)

1. 方案概述

pageutils.startpage() 是项目统一封装的分页工具类,基于 mybatis-plus 分页插件实现,通过 threadlocal 存储分页参数,对业务代码无侵入,是传统项目 / 老项目最常用的分页方式。

2. 核心原理

  1. 调用 startpage() 后,工具类自动获取前端传递的页码、每页条数
  2. mybatis-plus 分页插件拦截 sql,自动拼接 limit 分页语法;
  3. 执行查询返回 list 集合,工具类自动封装成分页结果集。

3. 适用场景

  • 项目已统一封装分页工具类
  • 不希望修改 mapper/service 层原有代码
  • 快速实现分页,低成本改造

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 参数)
        pageutils.startpage();
        
        // 2. 执行业务查询,返回普通 list 集合
        list<justicecasedimension> 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 javax.annotation.resource;

/**
 * 案件维度管理 controller
 */
@restcontroller
@requestmapping("/justice/case/dimension")
public class justicecasedimensioncontroller {

    @resource
    private casedimensioncontext casedimensioncontext;

    /**
     * 按范围查询案件聚合维度(账龄+批次号/被告)
     * 方案二:原生 ipage 分页(官方推荐)
     */
    @getmapping("/selectcasedimensionbyscope")
    public r<ipage<justicecasedimension>> selectcasedimensionbyscope(
            // 分页参数:自动接收 page、pagesize
            page<justicecasedimension> page,
            justicecasedimensionquery casedimensionquery
    ) {
        // 1. 直接传入 page 对象,返回 ipage 分页结果
        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) {
    // 调用 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 对象
代码简洁度需手动开启分页 + 封装结果一步到位,代码极简
分页信息工具类自动封装自带完整分页信息(总条数 / 总页数)
适用项目老项目、存量系统改造新项目、标准化开发
学习成本低(直接调用工具方法)低(原生对象,无额外学习)

四、最佳实践建议

  1. 新项目优先使用 原生 ipage 分页:符合官方规范,代码更易维护,团队协作成本更低;
  2. 老项目保留 pageutils 分页:无需大规模改造代码,兼容现有业务逻辑;
  3. 统一项目规范:一个项目中只使用一种分页方案,避免代码风格混乱。

到此这篇关于mybatis-plus实现分页查询两种方案详解的文章就介绍到这了,更多相关mybatis-plus分页查询内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com