自己写 菜品批量删除
controller
@DeleteMapping @ApiOperation("菜品删除") public Result delete(String ids){ log.info("菜品删除{}", ids); dishService.delete(ids); return Result.success(); }问题:
@RequestParam:从URL 参数中取值(例如?ids=1,2,3)
加上这个 spring才能知道把前端传来的请求参数放进ids这个变量里
ids只能单个删除 要传入多个参数 需要使用列表泛型
List<Long> ids 传入一个参数 里面包含多个需要删除的东西 spring 会自动分开
2改
调用方法只用变量名 不要类型
日志也是
---------------------------------------------------------------------------------------------------------------------------------
开始srvice层
接口:
void delete(List<Long> ids); }
具体实现:
public void delete(List<Long> ids) { for(Long id : ids){ } }能力有限 只能写这么些了
提示:
想一想。
你只有一个id。
id = 1你知道这个菜品的信息吗?
不知道。
所以是不是应该
根据id查询菜品。
于是你需要Mapper有一个方法。
例如
Dish getById(Long id);那么Service里面就是
Dish dish = dishMapper.getById(id);自己总结一下:
此时只有一个id 当然需要了解这个id下的菜品状态
所以需要调用mapper层来完成
涉及多次数据库操作的业务,通常都会加上@Transactional 事务
小错误纠正 变量引用(指向)了一个对象
接口声明了一个方法,但没有具体实现
DishMapper管的是 Dish表
现在查的是:
这个菜品有没有出现在套餐里面?
这其实查的是
SetmealDish表
所以 新创建俩文件 注入
不要忘记@Mapper
然后 补充一个知识点
现在用:
@Autowired private SetmealDishMapper setmealDishMapper;能工作。
但是现在Spring Boot更推荐:
private final SetmealDishMapper setmealDishMapper; public DishServiceImpl(SetmealDishMapper setmealDishMapper){ this.setmealDishMapper = setmealDishMapper; }叫构造器注入。
然后 接着删除
现在根据 count的数量进行删除决定
如果count>=1 不能删除
要抛异常
==0可以删除
关于 java异常机制的补充
抛异常和return一个报错有什么区别?
Service接口原本是什么?
void delete(List<Long> ids); 这个方法不返回任何东西
但是你现在:
return Result.error();
你返回了一个Result。
直接类型冲突。
那你改成:
public Result delete(List<Long> ids)
可以吗?
技术上可以。
但是架构上不好。
为什么?
Controller应该负责返回Result
它负责:
HTTP响应应该是什么格式。
但是Service负责什么?
Service负责:
业务能不能执行。
它不应该关心:
HTTP状态码
JSON格式
Result对象
那Service怎么告诉Controller失败?
这就是异常。
你可能之前以为:
throw是不是指定扔给某个地方?
不是。
throw的意思只是:
"当前方法无法处理这个问题,把异常交给调用我的人。"
至于最后谁处理:
取决于调用链。
这里的调用者是contorller所以当然也就抛给了contorller
比如:
@DeleteMapping public Result delete(){ dishService.delete(ids); return Result.success(); }没有:
try{ }catch(Exception e){ }怎么办?
Spring接管。
Spring MVC有一个机制:
全局异常处理器。
剩下的mapper和sql就先不研究了
---------------------------------------------------------------------------------------------------------------------------------
现在开始修改菜品
踩到的坑:
查询不用事务
多表修改需要
查什么表 返回什么数据类型
list表示多条记录 而不是多个字段
通常用在分页查询
了解。。。。 联表查询!
一对一的关系 可以使用 可以减少查找数据库的次数喵~
Mapper 从来都不是"返回数据库表",而是"返回 SQL 映射出来的 Java 对象"。
一个重点 怎么把 flavors补充到dishvo 里面去
好了接下来的 我懒得写了