1.在SpringBoot的pom文件中导入坐标,其中版本可以使用1.3.0版本
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper}</version>
</dependency>
2.通过PageHelper.startPage()方法设置页码和一页大小,查询后的结果使用Page<>接收
PageHelper.startPage(queryDTO.getPage(), queryDTO.getPageSize());
Page<DishVO> page = dishMapper.pageQuery(queryDTO);
下面通过一个项目体会插件的使用过程:
controller层,其中DishPageQueryDTO类中包含前端传来的page和pageSize两个字段
/**
* 菜品分页查询
* @param queryDTO
* @return
*/
@GetMapping("/page")
@ApiOperation("菜品分页查询")
//通过URL传参,所以不需要使用@RequestBody
public Result<PageResult> save(DishPageQueryDTO queryDTO){
log.info("菜品分页查询:{}", queryDTO);
PageResult pageResult = dishService.pageQuery(queryDTO);
return Result.success(pageResult);
}
service层对应的pageQuery()方法接口,以及对应的实现类。其中PageResult有total字段表示总记录数,records字段表示当前页数据集合。
/**
* 菜品分页查询
* @param queryDTO
*/
PageResult pageQuery(DishPageQueryDTO queryDTO);
/**
* 菜品分页查询
* @param queryDTO
*/
public PageResult pageQuery(DishPageQueryDTO queryDTO) {
PageHelper.startPage(queryDTO.getPage(), queryDTO.getPageSize());
Page<DishVO> page = dishMapper.pageQuery(queryDTO);
return new PageResult(page.getTotal(), page.getResult());
}
mapper层对应的pageQuery方法以及对应的xml映射语句
/**
* 菜品分页查询
* @param queryDTO
* @return
*/
Page<DishVO> pageQuery(DishPageQueryDTO queryDTO);
<select id="pageQuery" resultType="com.sky.vo.DishVO">
select d.*, c.name as categoryName from dish d left join category c on d.category_id = c.id
<where>
<if test="name != null">
and d.name like concat('%', #{name}, '%')
</if>
<if test="categoryId != null">
and d.category_id = #{categoryId}
</if>
<if test="status != null">
and d.status = #{status}
</if>
</where>
order by d.create_time desc
</select>
在sql语句中我们并没有加入对应分页的limit语句,而是由插件自动追加。