您的位置:

Pagehelper 在 Spring Boot 中的使用

一、什么是Pagehelper

Pagehelper 是 MyBatis 分页插件,可以使用最简单的方法实现 MyBatis 分页查询,支持多种数据库。

使用 Pagehelper 可以避免我们手动在 SQL 中编写分页逻辑,让开发更为便捷和高效。

二、在 Spring Boot 中使用 Pagehelper

1. 添加依赖

我们可以在 pom.xml 中添加 Pagehelper 的依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

2. 开启分页插件

在 Spring Boot 的配置文件中开启 Pagehelper :

# 开启分页插件支持
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

其中 helperDialect 表示数据库类型, reasonable 表示分页合理化参数,默认值为 false。支持方法参数类型集合,默认值为 false。

params 表示使用 map 接收分页参数时,param1 参数作为前缀值,count 作为后缀值,用于收集数据总数信息。也可以用这种方式自定义参数名。

3. 编写 DAO 层代码

我们可以在 DAO 层接口中直接使用 PageHelper 进行分页查询,如下所示:

List<SomeEntity> selectPage(@Param("pageNum") int pageNum, 
                                 @Param("pageSize") int pageSize);

这里的 pageNum 表示当前页码,pageSize 表示页面大小。

4. 编写 Service 层代码

在 Service 层中直接调用 DAO 层进行分页操作,如下所示:

@Service
public class SomeService {
    @Autowired
    private SomeDAO someDAO;

    public PageInfo<SomeEntity> selectPage(int pageNum, int pageSize) {
        // 开始分页
        PageHelper.startPage(pageNum, pageSize);
        List<SomeEntity> list = someDAO.selectPage();
        // 封装分页结果
        return new PageInfo<>(list);
    }
}

在使用 Pagehelper 进行分页查询时,我们需要先调用 PageHelper.startPage(pageNum, pageSize) 方法,设置页码和页面大小,然后执行查询操作。最后使用 PageInfo 对查询结果进行封装。

三、注意事项

1. 分页参数的传递方式

PageHelper 的分页参数可以使用方法参数、Map 或者 RowBounds 三种方式之一进行传递。

List<SomeEntity> selectPage(@Param("pageNum") int pageNum, 
                                 @Param("pageSize") int pageSize);

List<SomeEntity> selectPage(Map<String, Object> params);

List<SomeEntity> selectPage(RowBounds rowBounds);

2. 排序参数的使用

PageHelper 支持排序功能,我们可以在分页查询的时候指定排序字段和排序方向,如下所示:

PageHelper.orderBy("id DESC");

在使用 PageHelper.orderBy 方法时,需要注意使用大写字母进行排序字段的指定。

3. Mybatis Generator 自动生成代码的情况

如果使用了 Mybatis Generator 自动生成的代码,在生成的 Example 类中,我们需要使用类似如下的方式进行分页查询:

Example example = new Example(SomeEntity.class);
example.createCriteria().andXXXEqualTo(XXX);
// 排序
example.setOrderByClause("id DESC");
// 开始分页
PageHelper.startPage(pageNum, pageSize);
List<SomeEntity> list = someEntityMapper.selectByExample(example);
// 封装分页结果
return new PageInfo<>(list);

在使用 Mybatis Generator 自动生成的代码时,我们需要特别注意传递对象的方式和 Example 对象的使用。