一、什么是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 对象的使用。