织梦网站程序模板下载地址,北京注册公司麻烦吗,建筑工程网站导航,在线做漫画的网站好1理论
需求是新增菜品eg#xff1a;菜名:豆腐脑#xff1b;口味#xff1a;甜口#xff0c;咸口#xff0c;
菜单表#xff1a;dish#xff1b;口味表dish_flavor#xff1b;
1dto:数据传输对象 新建一个dishDto对象有两个表里的属性 2用到两个表#xff0c;dish,d…1理论
需求是新增菜品eg菜名:豆腐脑口味甜口咸口
菜单表dish口味表dish_flavor
1dto:数据传输对象 新建一个dishDto对象有两个表里的属性 2用到两个表dish,dish_flavor flavors返回的是口味的集合它属于dish_flavor表。1是豆腐脑多是甜口咸口。 2代码实现
1建一个dishDto的对象包含了两个表里用到的属性。
Data
public class DishDto extends Dish {private ListDishFlavor flavors new ArrayList();//口味表返回的口味集合private String categoryName;private Integer copies;
}
2在dish的service接口层写保存新增菜品的方法。 3在它的实现类里实现该方法saveWithFlavor(DishDto dishDto)
在菜品DishServiceImpl里注入口味的DishFlavorService
Autowired
private DishFlavorService dishFlavorService;
有多表操作用了事务Transactional,要在启动类里加EnableTransactionManagement激活
Service
public class DishServiceImpl extends ServiceImplDishMapper, Dish implements DishService {//多张表的操作加入事务控制Autowiredprivate DishFlavorService dishFlavorService;/*** 新增菜品同时保存口味数据** param dishDto*/OverrideTransactionalpublic void saveWithFlavor(DishDto dishDto) {
//保存菜品的基本信息到菜品表dish,this.save(dishDto);Long dishId dishDto.getId();//菜品的idListDishFlavor flavors dishDto.getFlavors();//菜品口味
// 处理元素并赋值flavors flavors.stream().map((item) - {item.setDishId(dishId);return item;}).collect(Collectors.toList());//java8新特性stream流的使用//保存菜品口味数据到菜品口味表dish_flavor}
}
4Controller层
Slf4j
RestController
RequestMapping(/dish)
public class DishController {Autowiredprivate DishService dishService;Autowiredprivate DishFlavorService dishFlavorService;PostMappingpublic RString save(RequestBody DishDto dishDto){//dto对象dishService.saveWithFlavor(dishDto);//调用事务方法return R.success(新增菜品成功);}
总结
多表调用建立dto返回口味数据用集合接收遍历口味赋值给菜品。具体实现在业务层写了也可以在sql里写。