当前位置: 代码网 > it编程>编程语言>Java > Mybatis实现数据分页的多种方式详解

Mybatis实现数据分页的多种方式详解

2026年08月05日 Java 我要评论
mybatis 实现数据分页主要有以下几种方式:1.sql 分页(手动分页)在 sql 语句中直接使用数据库特定的分页语法,如 mysql 的 limit 和 offset,oracle 的 rown

mybatis 实现数据分页主要有以下几种方式:

1.sql 分页(手动分页)

在 sql 语句中直接使用数据库特定的分页语法,如 mysql 的 limitoffset,oracle 的 rownum 等。
示例(mysql)

select * from users limit #{offset}, #{pagesize};
  • 优点:简单直接,无需额外依赖。
  • 缺点:需手动计算偏移量,sql 与数据库强绑定,移植性差。

2.rowbounds 分页(逻辑分页)

mybatis 内置的 rowbounds 类可在 java 代码中指定分页参数:

rowbounds rowbounds = new rowbounds(offset, pagesize);
list<user> users = sqlsession.selectlist("usermapper.selectall", null, rowbounds);
  • 优点:代码简洁,无需修改 sql。
  • 缺点:先查询全量数据再内存分页,大数据量时性能差。

3.分页插件(物理分页)

通过拦截器在 sql 执行前动态添加分页逻辑,如 pagehelper(主流方案)。

pagehelper 使用步骤:

添加依赖(maven):

<dependency>
    <groupid>com.github.pagehelper</groupid>
    <artifactid>pagehelper-spring-boot-starter</artifactid>
    <version>最新版本</version>
</dependency>

配置插件(自动配置或手动):

@configuration
public class mybatisconfig {
    @bean
    public pageinterceptor pageinterceptor() {
        return new pageinterceptor();
    }
}

业务代码中使用

// 开启分页,后续查询会自动添加分页逻辑
pagehelper.startpage(pagenum, pagesize);
list<user> users = usermapper.selectall();
// 获取分页信息
pageinfo<user> pageinfo = new pageinfo<>(users);
  • 优点:透明化分页逻辑,支持多种数据库,性能优。
  • 缺点:需引入依赖,可能有版本兼容问题。

4.自定义拦截器

通过实现 interceptor 接口自定义分页逻辑,适用于复杂场景:

@intercepts({@signature(type = executor.class, method = "query",
        args = {mappedstatement.class, object.class, rowbounds.class, resulthandler.class})})
public class custompageinterceptor implements interceptor {
    @override
    public object intercept(invocation invocation) throws throwable {
        // 动态修改 sql,添加分页逻辑
        // ...
        return invocation.proceed();
    }
}

5.流式查询(大数据量分页)

使用 mybatis 的 cursor<t> 接口逐行处理数据,避免一次性加载全量数据:

try (cursor<user> cursor = usermapper.selectbycursor()) {
    for (user user : cursor) {
        // 处理数据
    }
}

分页方案选择建议:

  • 小数据量:sql 分页或 rowbounds。
  • 大数据量:分页插件(如 pagehelper)或自定义拦截器。
  • 复杂场景:自定义拦截器或流式查询。

注意事项

  • 物理分页性能优于逻辑分页。
  • 分页插件可能影响复杂 sql 的执行,需谨慎使用。
  • 不同数据库的分页语法不同,切换数据库时需注意兼容性。

以上就是mybatis实现数据分页的多种方式详解的详细内容,更多关于mybatis实现数据分页的资料请关注代码网其它相关文章!

(0)

相关文章:

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

发表评论

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