it编程 > 编程语言 > Java

Mybatis的分页实现方式

9人参与 2025-06-11 Java

mybatis 的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异:

​1. 原生 sql 分页(物理分页)​

原理:直接在 sql 中编写数据库特定的分页语法(如 mysql 的 limit、oracle 的 rownum)。
示例

<select id="selectusers" resulttype="user">
  select * from users
  limit #{offset}, #{pagesize}
</select>

优点

缺点

​2. rowbounds 分页(逻辑分页)​

原理:通过 mybatis 的 rowbounds 对象实现内存分页(逻辑分页)。查询时会获取全部数据,但在内存中截取指定范围。
示例

list<user> users = sqlsession.selectlist("selectusers", null, new rowbounds(offset, pagesize));

优点

缺点

​3. pagehelper 插件(推荐)​

原理:通过拦截器动态修改 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);

优点

缺点

​4. mybatis-plus 分页插件

原理: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();

优点

​5. 自定义分页拦截器

缺点

分页方案对比

方案性能数据库兼容性代码侵入性适用场景
原生 sql 分页低(需手动适配)简单查询、固定数据库类型
rowbounds小数据集、逻辑分页
pagehelper通用场景,推荐使用
mybatis-plus使用 mybatis-plus 的项目
自定义拦截器可定制特殊需求

​总结

到此这篇关于mybatis是如何进行分页的的文章就介绍到这了,更多相关mybatis分页内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

06-11

MybatisPlus service接口功能介绍

06-11

Springboot3+将ID转为JSON字符串的详细配置方案

06-11

Mybatis Plus Join使用方法示例详解

06-11

MyBatis ResultMap 的基本用法示例详解

06-11

Java中实现线程的创建和启动的方法

06-11

猜你喜欢

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

发表评论