直裝模板源碼搜索引擎優(yōu)化自然排名的優(yōu)點(diǎn)
需求分析
在后臺(tái)中,通過(guò)新增功能來(lái)添加一個(gè)新的菜品,在添加菜品時(shí)需要選擇當(dāng)前菜品所屬的菜品分類,并且需要上傳的菜品圖片。
代碼開發(fā)
需要添加的類和基本接口:實(shí)體類DishFlavor
、Mapper接口DishFlavorMapper
、業(yè)務(wù)層接口DishFlavorService
、業(yè)務(wù)層實(shí)現(xiàn)類DishFlavorServiceImpl
、控制層DishController
- 頁(yè)面發(fā)送ajax請(qǐng)求,請(qǐng)求服務(wù)器端獲取菜品分類數(shù)據(jù)并展示到
下拉框
中 - 頁(yè)面發(fā)送請(qǐng)求進(jìn)行圖片上傳,請(qǐng)求服務(wù)端將圖片保存到服務(wù)器
- 頁(yè)面發(fā)送請(qǐng)求進(jìn)行圖片下載,將上傳的圖片進(jìn)行回顯
- 點(diǎn)擊保存按鈕,發(fā)送ajax請(qǐng)求,將菜品相關(guān)數(shù)據(jù)以json形式提交到服務(wù)端
獲取菜品分類列表(下拉框)
// 獲取菜品分類列表
const getCategoryList = (params) => {return $axios({url: '/category/list',method: 'get',params})
}
前端發(fā)送aiax請(qǐng)求的地址是'/category/list'
,所以應(yīng)該在CategoryController
中寫這個(gè)方法
添加菜品功能,通過(guò)調(diào)試前端發(fā)現(xiàn)查看菜品分類沒(méi)有報(bào)錯(cuò)。
/*** 根據(jù)條件,獲取菜品分類列表* @param category* @return*/@GetMapping("/list")public R<List<Category>> list(Category category){//條件構(gòu)造器LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();//添加條件queryWrapper.eq(category.getType() != null,Category::getType,category.getType());//添加排序條件 優(yōu)先使用sort排序 當(dāng)sort相同的情況下 使用更新時(shí)間進(jìn)行排序queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);List<Category> list = categoryService.list(queryWrapper);return R.success(list);}
排序也是正確的
上傳圖片
這里我上傳了兩次,第一次上傳的圖片超過(guò)了2MB,所以報(bào)錯(cuò)了,然后我只能上傳大笨狗,上傳成功了。下圖分別是上傳和瀏覽請(qǐng)求成功的提示。
接受頁(yè)面提交的數(shù)據(jù)
數(shù)據(jù)格式:
此時(shí)save()的參數(shù)不能直接使用Dish dish,因?yàn)橥ㄟ^(guò)前端傳送的數(shù)據(jù)格式可以看到有flavors這個(gè)參數(shù)。
解決辦法:導(dǎo)入
DishDto
,用于封裝頁(yè)面提交的數(shù)據(jù)
檢查封裝的數(shù)據(jù)是否有問(wèn)題:
2023-08-01 10:18:03.969 INFO 8552 --- [nio-8060-exec-2] c.s.reggie.controller.DishController : DishDto(flavors=[DishFlavor(id=null, dishId=null, name=甜味, value=["無(wú)糖","少糖","半糖","多糖","全糖"], createTime=null, updateTime=null, createUser=null, updateUser=null, isDeleted=null), DishFlavor(id=null, dishId=null, name=溫度, value=["熱飲","常溫","去冰","少冰","多冰"], createTime=null, updateTime=null, createUser=null, updateUser=null, isDeleted=null)], categoryName=null, copies=null)
測(cè)試代碼:
@PostMappingpublic R<String> save(@RequestBody DishDto dishDto)//記得封裝要加RequestBody注解{log.info(dishDto.toString());return null;}
新增大笨狗成功。
/*** 菜品管理*/
@RestController
@RequestMapping("/dish")
@Slf4j
public class DishController {@Autowiredprivate DishService dishService;//菜品服務(wù)@Autowiredprivate DishFlavorService dishFlavorService;//菜品口味@PostMappingpublic R<String> save(@RequestBody DishDto dishDto)//記得封裝要加RequestBody注解{log.info(dishDto.toString());dishService.saveWithFlavor(dishDto);return R.success("新增菜品成功...");}
package com.springboot.reggie.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.springboot.reggie.dto.DishDto;
import com.springboot.reggie.entity.Dish;
import com.springboot.reggie.entity.DishFlavor;
import com.springboot.reggie.mapper.DishMapper;
import com.springboot.reggie.service.DishFlavorService;
import com.springboot.reggie.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;
import java.util.stream.Collectors;@Service
@Slf4jpublic class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {@Autowiredprivate DishFlavorService dishFlavorService;/*** 新增菜品 同時(shí)保存對(duì)應(yīng)的口味* @param dishDto*/@Transactional //需要加上事務(wù)控制 因?yàn)樯婕暗蕉鄰埍淼牟僮?/span>public void saveWithFlavor(DishDto dishDto){//保存菜品的基本信息到菜品表this.save(dishDto);Long dishId = dishDto.getId();//給菜品id賦值//菜品口味List<DishFlavor> flavors = dishDto.getFlavors();flavors = flavors.stream().map((item)->{item.setDishId(dishId);return item;}).collect(Collectors.toList());//保存菜品口味數(shù)據(jù)到菜品口味表dishFlavorService.saveBatch(flavors);}}