后端接口概述

分页查询

Controller:

        @GetMapping

        参数:@RequestParam(required = "false",defaultValue = "1") String pageNumber

                @RequestParam(required = "false",defaultValue = "10") String pageSize

                String name //表单项数据

                String type // 表单项数据

        返回数据:PageVo<泛型,这里泛型类型是一个Ingredient食材实体类,rows数组里面一个个的Ingredient对象>对象类型的数据

    /**
     * 分页查询
     * @param pageNumber
     * @param pageSize
     * @param name
     * @param type
     * @return
     */
    @GetMapping
    public ResultVO getList(@RequestParam(required = false,defaultValue = "1") int pageNumber,
                            @RequestParam(required = false,defaultValue = "10") int pageSize,
                            String name, String type){
        PageVO<Ingredient> pageVO = ingredientService.getList(pageNumber, pageSize, name, type);
        return ResultVO.success(pageVO);
    }
{
    "code": 200,
    "message": "操作成功",
    "data": {
        "pageNumber": 1,
        "pageSize": 5,
        "rows": [
            {
                "id": 13,
                "name": "大公鸡",
                "url": "/files/fc4fb2bfeaac4e89867440306890c631.jpg",
                "type": "1",
                "description": "大公鸡",
                "createTime": "2023-08-17 09:59:08",
                "updateTime": null
            },
            {
                "id": 12,
                "name": "螃蟹",
                "url": "/files/f3b33dc173d1432f98d46e56b45f7b65.jpg",
                "type": "1",
                "description": "螃蟹",
                "createTime": "2023-08-17 09:27:31",
                "updateTime": null
            },
            {
                "id": 11,
                "name": "花椒",
                "url": "/files/205c5bddd82d4f11b91e5a8ea84215e9.jpg",
                "type": "3",
                "description": "花椒",
                "createTime": "2023-08-17 09:23:48",
                "updateTime": null
            },
            {
                "id": 10,
                "name": "鲍鱼",
                "url": "/files/8f408943398f4c02bf801683c73d23db.jpg",
                "type": "1",
                "description": "鲍鱼",
                "createTime": "2023-08-17 09:23:24",
                "updateTime": null
            },
            {
                "id": 9,
                "name": "鹌鹑蛋",
                "url": "/files/a216c8b6e6dd43f2a0dde00be44f532f.jpg",
                "type": "1",
                "description": "鹌鹑蛋",
                "createTime": "2023-08-17 09:22:36",
                "updateTime": null
            }
        ],
        "total": 13
    }
}

实现类

        参数:int pageNumber,int pageSize,String name,String type

        4步:

                1:PageHelper.startPage(pageNumber,pageSize) //传参,启动分页拦截器

                2:List<Ingredietn> ingredientList = ingredientMapper.getList(String name,String type) //传参表单项,调用Mapper执行分页查询

                3:PageInfo<Ingredient> pageInfo = new PageInfo<>(ingredientList) // 创建PageInfo对象,以便第四步组装PageVo的数据

                4:return new PageVo<>(pageInfo.getPageNum(),pageInfo.getPageSize(),ingredientList ,pageInfo.getTotal)

    @Override
    public PageVO<Ingredient> getList(int pageNumber, int pageSize, String name, String type) {
        PageHelper.startPage(pageNumber, pageSize);
        List<Ingredient> ingredientList = ingredientMapper.getList(name, type);
        PageInfo<Ingredient> pageInfo = new PageInfo<>(ingredientList);
        return new PageVO<>(pageInfo.getPageNum(), pageInfo.getPageSize(), ingredientList, pageInfo.getTotal());
    }

Mapper

        参数前加@Params注解

    /**
     * 根据食材名称或食材类型查询食材列表
     * @param name
     * @param type
     * @return
     */
    List<Ingredient> getList(@Param("name") String name, @Param("type") String type);
}

Mapper.xml

        from前别加逗号,

    <select id="getList" resultType="com.etoak.system.entity.Ingredient">
        select id,
        name,
        url,
        type,
        description,
        create_time
        from t_ingredient
        <where>
            <if test="name!=null and name!= '' ">
                AND name like concat(#{name},'%')
            </if>
            <if test="type!=null and type != ''">
                and type = #{type}
            </if>
        </where>
        order by create_time DESC
    </select>

添加食材

Controller

        @PostMapping

        参数:@RequestBody接收Json Ingredient ingredient实体类对象

实现类

        参数: Ingredient对象

        返回值:无

        1:参数校验 

        2:get对象的name根据queryWrapper的getOne()得到符合条件的一条记录

        3:(hutool)作判断,如果有这个名字的对象,返回自定义异常

        4:(hutool)创建时间,补全数据

        5:return save(ingredient)插入一个对象并返回

    @Override
    public boolean add(Ingredient ingredient) {

        ValidatorUtil.validate(ingredient);

        Ingredient savedIngredient = this.getByName(ingredient.getName());
        if (ObjectUtils.isNotEmpty(savedIngredient)) {
            throw new CustomException("该食材名称已存在");
        }

        ingredient.setCreateTime(DateUtil.now());
        return save(ingredient);
    }

    @Override
    public Ingredient getByName(String name) {
        QueryWrapper<Ingredient> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", name);
        return this.getOne(queryWrapper);
    }

修改食材

Controller

        @PutMapping("/{id}")

        参数: @PathVariable int id路径上的id,@RequestBody ingredient Json对象

        返回值: 无

    /**
     * 修改食材
     * @param id
     * @param ingredient
     * @return
     */
    @PutMapping("/{id}")
    public ResultVO updateIngredient(@PathVariable int id,@RequestBody Ingredient ingredient){
        ingredientService.updateIngredient(id,ingredient);
        return ResultVO.success();
    }

实现类

        1:作判断,getById()返回一条查询你要修改的这个食材数据库里有没有,如果返回空,就抛出自定义的异常

        2:做判断,自定义getByName()方法,根据传入的对象的名字在数据库中查到了跟传入对象名字一样的对象 && 这两个名字一样对象的id还不相同,那就不能改别库中正在使用这个相同名字的对象,抛出自定义异常

        3:参数id数据补全

        4:(hutool)时间数据补全

    /**
     * 修改食材
     * @param id
     * @param ingredient
     * @return
     */
    @Override
    public boolean updateIngredient(int id, Ingredient ingredient) {

        /* 根据id判断有没有要修改的食材 */
        Ingredient savedIngredient = this.getById(id);
        if (ObjectUtils.isEmpty(savedIngredient)) {
            throw new CustomException("没有要修改的食材");
        }

        /* 判断要修改的食材的id是否被其他食材使用了 */
        savedIngredient = this.getByName(ingredient.getName());
        if (ObjectUtils.isNotEmpty(savedIngredient) && !savedIngredient.getId().equals(id)) {
            throw new CustomException("该食材名称已被其他食材占用");
        }

        /* 数据补全 */
        ingredient.setId(id);
        ingredient.setUpdateTime(DateUtil.now());
        return this.updateById(ingredient);
    }

    @Override
    public Ingredient getByName(String name) {
        QueryWrapper<Ingredient> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", name);
        return this.getOne(queryWrapper);
    }

删除食材

Controller

        @Deletemapping("/{id}")

        参数: @PathVariable int id路径上的参数

                返回值: 无

    /**
     * 删除食材
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public ResultVO deleteIngredient(@PathVariable int id){
        ingredientService.deleteIngredient(id);
        return ResultVO.success();
    }

实现类

        参数:int id

        1:getById根据参数id查看数据库中有没有这个对象的记录,如果为空则声明自定义异常

        2:查看数据库中有没有其他的菜品正在使用这个食材,用stream()流.map()遍历这个List<Dish> 集合,拿到"...,...,..."这个所有使用这个食材的菜品长字符串

                Mapper

                参数: @Param("ing redient") int ingredient

    /**
     * 根据菜品id查询那些菜品使用了这个食材
     * @param ingredientId
     * @return
     */
    List<Dishes> getListByIngredientId(@Param("ingredientId") int ingredientId);

                DishesMapper.xml

    <select id="getListByIngredientId" resultType="com.etoak.system.entity.Dishes">
    select id,
           name
        from t_dishes
    where main = #{ingredientId}
        or minor = #{ingredientId}
        or seasoning = #{ingredientId}
    </select>

        3:removeById()数据库中删除这个食材对象

    @Override
    public boolean deleteIngredient(int id) {
        Ingredient savedIngredient = this.getById(id);
        if (ObjectUtils.isEmpty(savedIngredient)) {
            throw new CustomException("没有要删除的食材");
        }
        //校验这个食材有没有被菜品使用
        List<Dishes> dishesList = dishesMapper.getListByIngredientId(id);
        if (CollectionUtil.isNotEmpty(dishesList)) {
            String dishesName = dishesList.stream().map(dishes -> dishes.getName())
                    .collect(Collectors.joining(","));
            throw new CustomException(dishesName + "菜品使用了这个食材");
        }

        return this.removeById(id);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值