1.任务
- 实现分类管理功能数据的添加
- 实现分类管理数据的分页查询
- 实现分类管理数据的删除
由于前两个业务和之前的业务基本一致,所以这里就不重点介绍了,只放代码
2.分类管理功能数据的添加
前提:导入category实体类
2.1.CategoryMapper接口
//新增功能(含菜品和套餐)
int insertCategory(Category category);
2.2.CategoryMapper.xml映射文件
<insert id="insertCategory" parameterType="employee">
insert into category
(id,type,name,sort,create_time,update_time,create_user,update_user)
values
(#{id},#{type},#{name},#{sort},#{createTime},#{updateTime},#{createUser},#{updateUser})
</insert>
2.3.CategoryController类
//添加菜品和套餐
@PostMapping
public R<String> insetCategory(@RequestBody Category category){
//设置id(视频里的id是根据雪花算法来的,这里我就用随机数应付下)
Random random = new Random();
Long i = random.nextLong(100000000000L);
category.setId(i);
//设置创建和修改时间
category.setCreateTime(LocalDateTime.now());
category.setUpdateTime(LocalDateTime.now());
//设置创建人和修改人
category.setCreateUser(1L);
category.setUpdateUser(1L);
categoryService.insertCategory(category);
return R.success("添加成功");
}
3.实现分类管理数据的分页查询(mybatisplus)
由于使用的是mybatisplus,所以mapper,service层是固定的,这里就不写了
3.1.controller层
//分页查询
@GetMapping("/page")
public R<Page> page(int page,int pageSize){
//构造分页构造器
Page pageInfo = new Page<>(page,pageSize);
//构造条件构造器
LambdaQueryWrapper<Category> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByAsc(Category::getSort);
//执行分页查询
categoryPlusService.page(pageInfo,wrapper);
return R.success(pageInfo);
}
4.实现分类管理数据的删除
这一个功能需要重点看一看,因为在业务要求中要删除分类,还要先判断一下该分类下有没有关联的菜品或者套餐,如果有,则不能删除
- 首先导入菜品和套餐的实体类
- 编写查询SQL,查询关联的菜品和套餐的个数,如果为零,则可以执行删除SQL
点击删除按钮,前端传的url会跟着该分类的ids,当服务端获取到了ids之后,可以用该ids去查询关联的菜品和套餐
DishMapper接口
//查询category表中ids对应的dish表中有多少个菜品
Integer selectCountsById(Long ids);
DishMapper.xml映射文件
<select id="selectCountsById" resultType="Integer">
select count(*) from dish where category_id = #{id}
</select>
CategoryServiceImpl实现类
@Override
public int deleteCategoryByIds(Long ids) {
//查询关联菜品
Integer res = dishMapper.selectCountsById(ids);
log.info("res = {}",res);
//如果关联菜品数量大于0,则抛出异常
if (res > 0){
throw new CustomException("已有关联菜品,无法删除");
}
//否则执行删除语句
return categoryMapper.deleteCategoryByIds(ids);
}
自定义异常类
public class CustomException extends RuntimeException{
public CustomException(String message){
super(message);
}
}
全局异常处理
@ExceptionHandler(CustomException.class)
public R<String> exceptionHandler(CustomException customException){
log.info(customException.getMessage());
return R.error(customException.getMessage());
}
先用从前端获取的ids去查询dish表里有无关联的菜品,判断之后抛出一个异常,这也是一个要学习的点:
CustomException 是自己写的一个通用的异常类,可以学习下自定义的异常类该怎么写,该异常类抛出的异常会被我们自定义的全局异常处理类接收并处理
CategoryController类
//删除菜品或套餐
@DeleteMapping
public R<String> deleteCategoryByIds(Long ids){
log.info("id = {}",ids);
categoryService.deleteCategoryByIds(ids);
return R.success("删除成功");
}