PageHelper的分页条件查询
- 导入依赖
<!--分页查询插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
- 配置参数
#配置方言属性和自动更正不合理分页参数
pagehelper:
helper-dialect: mysql
reasonable: true
-
pojo类
/** * 菜品 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class Dish implements Serializable { private static final long serialVersionUID = 1L; private Long id; //菜品名称 private String name; //菜品分类id private Long categoryId; //菜品价格(数据库中为decimal(10,2)) private BigDecimal price; //图片 private String image; //描述信息 private String description; //0 停售 1 起售 private Integer status; private LocalDateTime createTime; private LocalDateTime updateTime; private Long createUser; private Long updateUser; }
-
前端参数封装
@Data public class DishPageQueryDTO implements Serializable { //第几页 private int page; //查多少 private int pageSize; //ca private String name; //分类id private Integer categoryId; //状态 0表示禁用 1表示启用 private Integer status; }
-
返回结果封装
/** * 封装分页查询结果 */ @Data //用有参构造方法把两个参数引入封装 @AllArgsConstructor @NoArgsConstructor public class PageResult implements Serializable { private long total; //总记录数 private List records; //当前页数据集合 }
-
controller层
/** * 菜品分页查询接口 * 不用加@RequestBody * @param dishPageQueryDTO * @return */ @GetMapping("/page") @ApiOperation("菜品分页查询") public Result<PageResult> page(DishPageQueryDTO dishPageQueryDTO){ log.info("菜品分页查询:{}",dishPageQueryDTO); PageResult pageResult=dishService.pageDish(dishPageQueryDTO); return Result.success(pageResult); }
-
service及其实现
/** * 菜品分页查询 * @param dishPageQueryDTO */ PageResult pageDish(DishPageQueryDTO dishPageQueryDTO);
/** * 菜品分页查询 * @param dishPageQueryDTO */ @Override public PageResult pageDish(DishPageQueryDTO dishPageQueryDTO) { //开启分页查询PageHelper(要导入对应坐标) //开始分页查询,第几页查多少,把页码和页数传递 //这个插件底层是基于mybatis的拦截器,把后面的sql进行拼接;相当于sql中的limit关键字拼接,根据两个参数进行动态计算【即字符串的拼接交给插件去做】 PageHelper.startPage(dishPageQueryDTO.getPage(),dishPageQueryDTO.getPageSize()); //在数据层中要取name和categoryId,条件限制 Page<DishVO> page=dishMapper.pageQuery(dishPageQueryDTO); //获取数据封装返回 return new PageResult(page.getTotal(),page.getResult()); }
-
注意:
Page<DishVO> page=dishMapper.pageQuery(dishPageQueryDTO);
相当于:List<Dish> dish=dishMapper.pageQuery(dishPageQueryDTO); Page<Dish> page=(Page<Dish>) dish
Page中提供中提供了方法,可以获取PageHelper分页查询后,得到的总记录条数和当前页条数;需要将查询到的
List<Dish>
数据强转为Page<Dish>
类型,然后分别取出page对象中的总条数当前数据封装返回
-
-
mapper(.java与.xml)
/** * 分页查询菜品 * @param dishPageQueryDTO * @return */ Page<DishVO> pageQuery(DishPageQueryDTO dishPageQueryDTO);
<!--条件查询--> <select id="list" resultType="Dish"> select * from dish <where> <if test="categoryId!=null"> and category_id=#{categoryId} </if> <if test="status!=null"> and status=#{status} </if> </where> </select>