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类
//添加菜品和套餐@PostMappingpublic 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实现类
@Overridepublic 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类
//删除菜品或套餐@DeleteMappingpublic R<String> deleteCategoryByIds(Long ids){log.info("id = {}",ids);categoryService.deleteCategoryByIds(ids);return R.success("删除成功");}