1、导入分页管理的依赖
< dependency>
< groupId> com. github. pagehelper< / groupId>
< artifactId> pagehelper- spring- boot- starter< / artifactId>
< version> ${ pagehelper} < / version>
< / dependency>
2、将分页完成的结果封装到一个类中,将该类放回给前端就行
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult implements Serializable {
private long total;
private List records;
}
3、例如菜品的分页查询 controller中
@GetMapping ( "/page" )
@ApiOperation ( "菜品分页查询" )
public Result < PageResult > page ( DishPageQueryDTO dishPageQueryDTO) {
log. info ( "菜品分页查询:{}" , dishPageQueryDTO) ;
PageResult pageResult = dishService. pageQuery ( dishPageQueryDTO) ;
return Result . success ( pageResult) ;
}
4、service中
PageResult pageQuery ( DishPageQueryDTO dishPageQueryDTO) ;
5、serviceimpl中
@Override
public PageResult pageQuery ( DishPageQueryDTO dishPageQueryDTO) {
PageHelper . startPage ( dishPageQueryDTO. getPage ( ) , dishPageQueryDTO. getPageSize ( ) ) ;
Page < DishVO > page = dishMapper. pageQuery ( dishPageQueryDTO) ;
return new PageResult ( page. getTotal ( ) , page. getResult ( ) ) ;
}
6、mapper中
Page < DishVO > pageQuery ( DishPageQueryDTO dishPageQueryDTO) ;
7、mapper.xml中,因为前面传过来会有name的搜索,categoryId和status的搜索,使用会在这里进行查询
< ! -- 向前端返回dish表的所有再加上分类表中的菜品分类名称 所以采用了vo来接收这张新的全部字段-- >
< select id= "pageQuery" resultType= "com.sky.vo.DishVO" >
select d. *, c. name as categoryName from dish d left outer 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>
DTO(前端传过来的条件)
@Data
public class DishPageQueryDTO implements Serializable {
private int page;
private int pageSize;
private String name;
private Integer categoryId;
private Integer status;
}
VO(我们要查询完数据库后,要返回给前端的数据)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DishVO implements Serializable {
private Long id;
private String name;
private Long categoryId;
private BigDecimal price;
private String image;
private String description;
private Integer status;
private LocalDateTime updateTime;
private String categoryName;
private List < DishFlavor > flavors = new ArrayList < > ( ) ;
}