对菜品进行分页查询展示,其中菜品分类属性属于分类表中的属性,涉及多表查询。
处理逻辑:
Vue:
await getDishPage(params).then(res => {
if (String(res.code) === '1') {
this.tableData = res.data.records || []
this.counts = res.data.total
}
}).catch(err => {
this.$message.error('请求出错了:' + err)
})
// 查询列表接口
const getDishPage = (params) => {
return $axios({
url: '/dish/page',
method: 'get',
params
})
}
dto:
@Data
public class DishDto extends Dish {
private String categoryName;
}
controller:
@GetMapping("/page")
public R<Page> page(int page, int pageSize,String name) {
//分页构造器
Page<Dish> pageinfo = new Page(page, pageSize);
Page<DishDto> dishDtoPage = new Page<>();
//条件构造器
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(Strings.isNotEmpty(name),Dish::getName,name);
queryWrapper.orderByAsc(Dish::getUpdateTime);
dishService.page(pageinfo, queryWrapper);
//对象拷贝
BeanUtils.copyProperties(pageinfo,dishDtoPage,"records"); //records保存的是对象信息,除了records都复制至dishDtoPage
List<Dish> records = pageinfo.getRecords(); //获取pageinfo的对象信息
//根据id查询Name
List<DishDto> list = records.stream().map((item)->{
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(item,dishDto); //将pageinfo的对象信息拷贝至dishDto中
Long categoryId = item.getCategoryId();
//根据id查询出分类对象
Category category = categoryService.getById(categoryId);
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
return dishDto;
}).collect(Collectors.toList());
dishDtoPage.setRecords(list);
return R.success(dishDtoPage);
}