进行需求分析这里涉及几个接口,修改菜品之前需要把这个菜品信息来查询一下用于页面回显,这个查询操作对应一个接口。菜品分类其实是一个下拉框,这里面需要展示所有的菜品相关分类,这也是需要查询的,所以查询分类也是一个接口。涉及图片的重新上传,有可能需要上传一张新的图片,涉及到图片的重新上传,这也是一个接口。 最后,当我们点击保存按钮的时候实际把数据更新到数据库里面,真正的修改操作对应的又是一个接口。分析完这一共涉及4个接口,其中两个接口我们之前已经实现。
查询菜品的同时需要把关联的口味一起查上来,口味可能有多个,所以这个地方是一个数组。
这里我们要查询两张表,一张是菜品表(dish),一张是口味表(dish_flavor),给它封装到DishVO里面去。
1.先查菜品表获取到基础的属性,菜品表里面字段的值。
2.根据dish_id也就是菜品id,来查询关联的口味(dish_id是逻辑外键)。
3.最终把这两部分数据封装到一起,封装到DishVO里面。
修改菜品表比较简单直接发一个update语句就可以了,关联的口味表就有几种情况, 我们有可能把口味删掉加一些新的口味,有可能没改,有可能是追加的,也有可能是删除了。所有这里我们用了一种比较简单的处理方式,把当前这个菜品原先关联的口味数据全都统一删掉,然后再按照当前传过来的这个口味数据,重新再来插入一遍数据。也就是先删除原先的口味数据,再插入新的口味数据,最终是一个修改的效果。
这个DishDTO包含了口味数据,而我们当前只修改菜品表基本信息,所以我们这里传一个菜品对象更加合理。
这个修改菜品表基本信息我们用了动态SQL,也就是当传过来的菜品表里面的属性不为空时再去对它进行修改。修改的时候我们还需要设置修改人id和修改的时候,前面我们完成了公共字段自动填充,这时候加注解指定操作类型就可以了。
插入口味数据前我们要先判断传过来的口味数据有没有值,插入口味数据之前我们也要设置一下dish_id,因为这个口味数据可能是新增出来的,这时候dish_id还没有值,最后进行口味数据批量插入。
1.修改菜品表的基本信息
2.删除原有的口味数据
3.重新批量插入口味数据
注意:我们前面做了公共字段自动填充,是对这个对象里面的公共字段属性进行赋值,但是这并没有在数据库里面进行修改,所以在这里也需要添加这两个字段从而实现对数据库里面公共字段的修改。