springboot项目学习(4)续

1.任务

  • 菜品的添加功能(涉及到两张表的数据添加)

2.菜品添加

功能页面如上,该页面有两个注意点

  1. 菜品分类:点击菜品分类后,会展示当前已有菜品:这个功能的实现要从category表里查询数据,然后再做展示
  2. 口味做法配置:口味的添加涉及到了另一张表dish_flavor,添加的口味需要存放在这张表里

2.1.菜品分类

在add.html文件中,有getDishList函数,里面的getCategoryList函数的函数体在food.js中向服务端发送了Ajax请求,并且还传了一个type作为参数(type为1表示是菜品,type为2表示是套餐)

 2.1.1.CategoryMapper.xml

<select id="selectDishByType" resultType="category">
        select * from category where type = #{type}
    </select>

service层的代码省略

2.1.2.CategoryController 

//展示菜品分类
@GetMapping("/list")
public R<List<Category>> selectDishByType(Category category){
    List<Category> dishList = categoryService.selectDishByType(category);
    return R.success(dishList);
}

注意:返回类型是List集合,因为前端接收服务端传来的数据时用的是数组类型,如下:

2.2口味做法配置

当点击保存按钮之后,前端会发送如下请求

 

上述页面中的数据,除了口味做法配置中的数据会存放在dish_flavor表中,剩下的数据都会存放在dish表中,如何请求一次服务端同时操作两张表呢?

  • 在这里给出的做法很简单,在FlavorMapper.xml中编写插入dish_flavor表的SQL语句,在DishMappr.xml中编写插入dish表的SQL语句,各写各的,但是最后都在DishServiceImpl实现类中调用上面两个方法,完成向两张表插入数据
  • 还有一个问题,前端给服务端返回Json格式的数据,我们改用什么类型的参数来接收呢?答案是dto类型(data transfer object数据传输对象),在这个类中既封装了dish类的数据,又封装了dish_flavor类的数据

2.2.1.DishDto实体类

public class DishDto extends Dish {

    //将前端获取到的值封装到flavors中
    private List<DishFlavor> flavors = new ArrayList<>();
}

2.2.2.DishServiceImpl

@Override
    public void addDish(DishDto dishDto) {

        DishFlavor dishFlavor = new DishFlavor();
        //获取菜品id,为填写dish_id做准备
        Long id = dishDto.getId();
        dishFlavor.setDishId(id);

        //遍历从前端获取的口味集合,并将name和value赋值给dishFlavor对象
        List<DishFlavor> flavors = dishDto.getFlavors();
        for (DishFlavor flavor : flavors) {
            //获取name
            String name = flavor.getName();
            dishFlavor.setName(name);

            //获取value
            String value = flavor.getValue();
            dishFlavor.setValue(value);
        }

        //给dishFlavor对象赋id
        Random random = new Random();
        dishFlavor.setId(random.nextLong(1000000000000000000l));

        //给dishFlavor对象赋创造和修改时间
        dishFlavor.setCreateTime(LocalDateTime.now());
        dishFlavor.setUpdateTime(LocalDateTime.now());

        //给dishFlavor对象赋创造和修改人
        dishFlavor.setCreateUser(1L);
        dishFlavor.setUpdateUser(1L);

        //向口味表里添加口味
        flavorMapper.addFlavor(dishFlavor);

        //向菜品表里添加菜品
        dishMapper.addDish(dishDto);
    }

重点就是这个实现类,当我们从controller层获取到了前端传来的dishDto这个参数后,从其中取出dish_flavor表里面的数据,并将其封装在dishFlavor这个对象中,这样就能通过传给mapper层dishFlavor这个对象来插入数据了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值