这里分页查询最重要的一步是对 查询条件和返回值 进行了统一封装
现在有一个这样的表格要进行分页查询
下面是对其进行分页查询的全步骤
首先需要封装统一的查询条件和统一的返回值
就是这两部分
1.封装统一的查询条件
2.封装统一的返回值
3.controller
4 .service
5. 实现
@Override
public PageDTO<UserVO> queryUserPage(UserQuery query) {
String name= query.getName();
Integer status = query.getStatus();
//构建查询条件
Page<User> page = Page.of(query.getPageNo(), query.getPageSize());
//排序条件
if(StrUtil.isNotEmpty(query.getSortBy())){
//排序字段不为空
page.addOrder(new OrderItem(query.getSortBy(),query.getIsAsc()));
}else {
//排序字段为空,默认按照更新时间排序
page.addOrder(new OrderItem("update_time",false));
}
//分页查询
Page<User> p = lambdaQuery()
.like(name != null, User::getUsername, name)
.eq(status != null, User::getStatus, status)
.page(page);
//封装vo结果
PageDTO<UserVO> dto=new PageDTO<>();
//总条数
dto.setTotal(p.getTotal());
//总页数
dto.setPages(p.getPages());
//当前页数据
List<User> records = p.getRecords();
if (CollUtil.isEmpty(records)){dto.setList(Collections.emptyList());return dto;}
//拷贝vo
dto.setList(BeanUtil.copyToList(records, UserVO.class));
//返回查询结果
return dto;
}