9人参与 • 2025-06-11 • Java
mybatis 的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异:
原理:直接在 sql 中编写数据库特定的分页语法(如 mysql 的 limit
、oracle 的 rownum
)。
示例:
<select id="selectusers" resulttype="user"> select * from users limit #{offset}, #{pagesize} </select>
优点:
缺点:
原理:通过 mybatis 的 rowbounds
对象实现内存分页(逻辑分页)。查询时会获取全部数据,但在内存中截取指定范围。
示例:
list<user> users = sqlsession.selectlist("selectusers", null, new rowbounds(offset, pagesize));
优点:
缺点:
原理:通过拦截器动态修改 sql,自动添加分页语句(物理分页)。支持多种数据库,并封装分页结果(总条数、页码等)。
使用步骤:
引入依赖:
<dependency> <groupid>com.github.pagehelper</groupid> <artifactid>pagehelper</artifactid> <version>5.3.0</version> </dependency>
配置拦截器(mybatis 配置文件中):
<plugins> <plugin interceptor="com.github.pagehelper.pageinterceptor"> <property name="helperdialect" value="mysql"/> <!-- 指定数据库类型 --> </plugin> </plugins>
代码调用:
// 开启分页 pagehelper.startpage(pagenum, pagesize); list<user> users = usermapper.selectusers(); // 封装分页结果 pageinfo<user> pageinfo = new pageinfo<>(users);
优点:
pageinfo
对象,包含总记录数、总页数、当前页等分页信息。缺点:
原理:mybatis-plus 是 mybatis 的增强工具,内置分页插件,通过拦截器实现物理分页。
使用步骤:
引入依赖:
<dependency> <groupid>com.baomidou</groupid> <artifactid>mybatis-plus-boot-starter</artifactid> <version>3.5.3.1</version> </dependency>
配置分页插件:
@configuration public class mybatisplusconfig { @bean public mybatisplusinterceptor mybatisplusinterceptor() { mybatisplusinterceptor interceptor = new mybatisplusinterceptor(); interceptor.addinnerinterceptor(new paginationinnerinterceptor(dbtype.mysql)); return interceptor; } }
代码调用:
// 创建分页参数 page<user> page = new page<>(pagenum, pagesize); // 执行分页查询 page<user> result = usermapper.selectpage(page, null); // 获取分页信息 long total = result.gettotal(); list<user> users = result.getrecords();
优点:
page
对象。interceptor
接口,动态修改 sql 添加分页逻辑。缺点:
分页方案对比
方案 | 性能 | 数据库兼容性 | 代码侵入性 | 适用场景 |
---|---|---|---|---|
原生 sql 分页 | 高 | 低(需手动适配) | 高 | 简单查询、固定数据库类型 |
rowbounds | 低 | 高 | 低 | 小数据集、逻辑分页 |
pagehelper | 高 | 高 | 低 | 通用场景,推荐使用 |
mybatis-plus | 高 | 高 | 中 | 使用 mybatis-plus 的项目 |
自定义拦截器 | 高 | 可定制 | 高 | 特殊需求 |
rowbounds
处理大数据集,可能导致内存溢出。到此这篇关于mybatis是如何进行分页的的文章就介绍到这了,更多相关mybatis分页内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论