返回

Mybatis分页查询:玩转两种方案,一文搞定!

后端

MyBatis 分页查询指南:PageHelper 与 MybatisPlus

在处理庞大数据集时,分页查询至关重要,它可以分批次检索数据,提升性能和用户体验。本文将深入探讨两种流行的 MyBatis 分页插件:PageHelper 和 MybatisPlus 自带的分页插件,并提供详细的示例。

PageHelper

PageHelper 是一款轻量级分页插件,因其易用性和灵活性而备受青睐。

配置

在 MyBatis 配置文件中添加以下配置:

<plugins>
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <property name="autoRuntimeDialect" value="true"/>
    </plugin>
</plugins>

用法

要启用分页,请在需要分页的 SQL 语句中调用 PageHelper.startPage() 方法设置分页参数,然后调用 PageHelper.page() 方法获取分页结果:

// 设置分页参数:当前页码和每页记录数
PageHelper.startPage(1, 10);

// 执行查询,返回当前页记录列表
List<User> userList = sqlSession.selectList("com.mybatis.mapper.UserMapper.findAll");

// 获取分页结果,包含总记录数、当前页记录数、总页数等信息
PageInfo<User> pageInfo = new PageInfo<>(userList);

MybatisPlus

MybatisPlus 自带的分页插件功能强大,与框架深度集成。

配置

在 MyBatis 配置文件中添加以下配置:

<plugins>
    <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"/>
</plugins>

用法

使用 IPage 接口设置分页参数,并调用 selectPage() 方法获取分页结果:

// 创建 IPage 对象,设置分页参数:当前页码和每页记录数
IPage<User> page = new Page<>(1, 10);

// 执行查询,返回当前页记录列表和分页信息
List<User> userList = sqlSession.selectList("com.mybatis.mapper.UserMapper.findAll", page);

// 获取分页结果,包含总记录数、当前页记录数、总页数等信息
PageInfo<User> pageInfo = new PageInfo<>(userList);

总结

PageHelper 和 MybatisPlus 分页插件各有优势:

  • PageHelper 配置简单,使用灵活,但需要手动设置分页参数。
  • MybatisPlus 分页插件与框架深度集成,不需要手动设置分页参数。

常见问题解答

1. 两种分页插件有什么区别?

PageHelper 是一款第三方插件,而 MybatisPlus 分页插件是框架自带的。MybatisPlus 分页插件与框架集成度更高,但 PageHelper 更加轻量级。

2. 分页查询时,如何获取总记录数?

使用 PageHelper:pageInfo.getTotal()
使用 MybatisPlus:page.getTotal()

3. 如何在分页查询中使用排序?

在 SQL 语句中添加 ORDER BY 子句。

4. 分页查询可以应用于哪些类型的 SQL 语句?

任何类型的 SQL 语句,包括 SELECTUPDATEDELETE

5. 如何避免分页查询的性能问题?

优化 SQL 查询,使用索引,避免使用子查询和关联查询。