在MyBatis中进行分页查询的两种方法详解

 更新时间:2025年11月17日 09:23:05   作者:java1234_小锋  
在 MyBatis 中进行分页查询通常有两种方法:一种是通过手动拼接 LIMIT 和 OFFSET,另一种是使用 MyBatis 插件(如 MyBatis-PageHelper)来自动处理分页逻辑,下面分别介绍这两种方法,需要的朋友可以参考下

如何在MyBatis中进行分页查询?

在 MyBatis 中进行分页查询通常有两种方法:一种是通过手动拼接 LIMITOFFSET,另一种是使用 MyBatis 插件(如 MyBatis-PageHelper)来自动处理分页逻辑。下面分别介绍这两种方法。

1.手动实现分页查询

手动分页查询需要在 SQL 语句中使用数据库支持的分页语法,如 LIMIT(MySQL、PostgreSQL)或 ROWNUM(Oracle)等。你可以通过传递 offset(起始行)和 limit(每页的条目数)来实现分页。

1.1 修改 Mapper XML 文件

在 XML 文件中,通常通过传递 offsetlimit 参数来构造分页查询 SQL。

Mapper 接口:

public interface UserMapper {
    List<User> selectUsersByPage(@Param("offset") int offset, @Param("limit") int limit);
}

Mapper XML 文件:

<mapper namespace="com.example.UserMapper">
    <select id="selectUsersByPage" resultType="com.example.User">
        SELECT * FROM users
        LIMIT #{limit} OFFSET #{offset}
    </select>
</mapper>

1.2 计算offset

通常,offset 的计算方式是 (currentPage - 1) * pageSize,其中:

  • currentPage 是当前页码(从 1 开始)。
  • pageSize 是每页显示的记录数。

调用分页查询:

int currentPage = 1; // 当前页
int pageSize = 10;   // 每页的条数
int offset = (currentPage - 1) * pageSize;

List<User> users = userMapper.selectUsersByPage(offset, pageSize);

2.使用 MyBatis 插件(如 PageHelper)进行分页

如果你不想手动编写分页逻辑,可以使用第三方分页插件,如 PageHelper,它可以自动处理分页,简化分页操作。

2.1 引入 PageHelper 插件

pom.xml 中添加 PageHelper 的依赖。

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.0</version> <!-- 确保使用最新版本 -->
</dependency>

2.2 配置 PageHelper 插件

在 MyBatis 的配置文件 mybatis-config.xml 中配置 PageHelper 插件。

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <property name="helperDialect" value="mysql"/> <!-- 针对 MySQL -->
        <property name="reasonable" value="true"/>
        <property name="supportMethodsArguments" value="true"/>
    </plugin>
</plugins>

2.3 使用 PageHelper 进行分页查询

PageHelper 插件通过 PageHelper.startPage(pageNum, pageSize) 来启用分页。分页的实际 SQL 会在查询时动态生成。

Mapper 接口:

public interface UserMapper {
    List<User> selectAllUsers();
}

调用分页查询:

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

int currentPage = 1;  // 当前页
int pageSize = 10;    // 每页记录数

// 启动分页
PageHelper.startPage(currentPage, pageSize);

// 执行查询
List<User> users = userMapper.selectAllUsers();

// 获取分页信息
PageInfo<User> pageInfo = new PageInfo<>(users);
System.out.println("Total pages: " + pageInfo.getPages());
System.out.println("Total records: " + pageInfo.getTotal());

返回分页信息:

  • pageInfo.getTotal() 获取总记录数。
  • pageInfo.getPages() 获取总页数。
  • pageInfo.getList() 获取当前页的数据。

总结

  • 手动分页:适用于简单的分页需求,你需要手动计算 offset 和 limit,并在 SQL 中使用适当的分页语法。
  • PageHelper 插件:适用于复杂分页查询,通过自动生成分页的 SQL,简化了分页的配置和调用。它支持多种数据库(MySQL、Oracle、PostgreSQL 等)和复杂的查询场景。

如果你的项目中经常需要分页查询,推荐使用 PageHelper 插件,因为它能自动处理很多复杂的分页逻辑,减少了代码量。

到此这篇关于在MyBatis中进行分页查询的两种方法详解的文章就介绍到这了,更多相关MyBatis进行分页查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring深入了解常用配置应用

    Spring深入了解常用配置应用

    这篇文章主要给大家介绍了关于Spring的常用配置,文中通过示例代码介绍的非常详细,对大家学习或者使用springboot具有一定的参考学习价值,需要的朋友可以参考下
    2022-07-07
  • MyBatis Plus 入门使用详细教程

    MyBatis Plus 入门使用详细教程

    这篇文章主要介绍了MyBatis Plus 入门使用详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 详解Java类加载器与双亲委派机制

    详解Java类加载器与双亲委派机制

    这篇文章主要为大家介绍一下Java中的类加载器与双亲委派机制,文中通过示例为大家进行了详细的介绍,对我们学习Java有一定帮助,需要的可以参考一下
    2022-08-08
  • JavaScript中new运算符的实现过程解析

    JavaScript中new运算符的实现过程解析

    这篇文章主要介绍了JavaScript中new运算符的实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java如何实现批量修改文件类型

    java如何实现批量修改文件类型

    在文件管理,媒体处理,数据迁移等各种业务场景中,经常会遇到“批量修改文件类型”这一需求,本文将详细介绍如何使用Java实现批量修改文件类型,有需要的小伙伴可以参考一下
    2025-06-06
  • Java深入讲解static操作符

    Java深入讲解static操作符

    static关键字基本概念我们可以一句话来概括:方便在没有创建对象的情况下来进行调用。也就是说:被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问,让我们来了解一下你可能还不知道情况
    2022-07-07
  • Java中Jackson的多态反序列化详解

    Java中Jackson的多态反序列化详解

    这篇文章主要介绍了Java中Jackson的多态反序列化详解,多态序列化与反序列化,主要是借助于Jackson的@JsonTypeInfo与@JsonSubTypes注解实现,下面将通过几个例子来简述其运用,需要的朋友可以参考下
    2023-11-11
  • Java实现图像分割功能

    Java实现图像分割功能

    这篇文章主要为大家详细介绍了Java实现图像分割功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Spring Boot分页方法定义示例

    Spring Boot分页方法定义示例

    这篇文章主要为大家介绍了Spring Boot 分页方法定义,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 详解Spring获取配置的三种方式

    详解Spring获取配置的三种方式

    这篇文章主要为大家详细介绍了Spring获取配置的三种方式:@Value方式动态获取单个配置、@ConfigurationProperties+前缀方式批量获取配置以及Environment动态获取单个配置,感兴趣的可以了解一下
    2022-03-03

最新评论