java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MyBatis进行分页查询

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

作者: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,其中:

调用分页查询:

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());

返回分页信息:

总结

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

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

您可能感兴趣的文章:
阅读全文