首頁 > Java > java教程 > 主體

Java新增菜色與分頁查詢怎麼實現

PHPz
發布: 2023-05-20 13:10:06
轉載
860 人瀏覽過

    一. 新增菜色

    1.1需求分析

    後台系統可以管理分類信息,分類菜品分類和套餐分類。當我們在後台系統添加菜色時需要選擇一個菜色分類。

    當我們在後台系統中新增一個套餐時需要選擇一個套餐分類,在行動端也會依照菜色分類和套餐分類來展示對應的菜色和套餐。

    Java新增菜色與分頁查詢怎麼實現

    同時,在後台系統的分類管理頁面分別加入菜色與套餐分類:

    新增菜色

    Java新增菜色與分頁查詢怎麼實現

    新增套餐分類

    Java新增菜色與分頁查詢怎麼實現

    #資料模型:

    #涉及一張表格Category表格:

    Java新增菜色與分頁查詢怎麼實現

    表格對應的資料JavaBean為Category.java

    Category.java

    package com.itheima.reggie.entity;
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    import lombok.Getter;
    import lombok.Setter;
    import java.io.Serializable;
    import java.time.LocalDateTime;
    /**
     * 分类
     */
    @Data
    public class Category implements Serializable {
        private static final long serialVersionUID = 1L;
        private Long id;
        //类型 1 菜品分类 2 套餐分类
        private Integer type;
        //分类名称
        private String name;
        //顺序
        private Integer sort;
        //创建时间
        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime createTime;
        //更新时间
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private LocalDateTime updateTime;
        //创建人
        @TableField(fill = FieldFill.INSERT)
        private Long createUser;
        //修改人
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Long updateUser;
        //是否删除
        private Integer isDeleted;
    }
    登入後複製

    具體架子參考前面的Employee員工實體的建置。

    1.2程式碼開發

    新增菜色分類與套餐分類請求的服務位址與提交的JSON資料結構相同,服務端只需提供一個方法即可:

    API
    ##/category請求資料{
    說明#值
    #請求URL
      "name": "川菜",
      "type": "1",
      "sort": "1"
    }
    程式碼
    在CategoryController.java中撰寫新增程式碼:

    package com.itheima.reggie.controller;
    import com.itheima.reggie.common.R;
    import com.itheima.reggie.entity.Category;
    import com.itheima.reggie.service.CategoryService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import javax.annotation.Resource;
    /**
     * @author jektong
     * @date 2022年05月06日 21:47
     */
    @RestController
    @Slf4j
    @RequestMapping("/category")
    public class CategoryController {
        @Resource
        private CategoryService categoryService;
        /**
         * 新增分类
         * @param category
         * @return
         */
        @PostMapping
        public R<String> save(@RequestBody Category category){
            log.info("category:{}",category);
            categoryService.save(category);
            return R.success("新增分类成功");
        }
    }
    登入後複製

    二. 分類資訊分頁查詢

    分頁查詢與先前的員工資訊查詢是一樣的,直接上程式碼:

    @GetMapping("/page")
        public R<Page> page(int page, int pageSize){
            // 分页构造
            Page<Category> pageInfo = new Page<Category>(page,pageSize);
            // 查询并排序
            LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper();
            queryWrapper.orderByAsc(Category::getSort);
            // 分页查询
            categoryService.page(pageInfo,queryWrapper);
            return R.success(pageInfo);
        }
    登入後複製

    三. 刪除分類

    #3.1 需求分析

    在分類管理列表頁面,可以對某個分類進行刪除操作。需要注意的是當分類關聯了菜色或套餐時,此分類不允許刪除。

    Java新增菜色與分頁查詢怎麼實現

    API

    #值

    請求URL

    /category?id=

    #需用引入菜品與套餐兩個實體:

    Dish.java:菜品實體

    package com.itheima.reggie.entity;
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    import java.io.Serializable;
    import java.math.BigDecimal;
    import java.time.LocalDateTime;
    /**
     菜品
     */
    @Data
    public class Dish implements Serializable {
        private static final long serialVersionUID = 1L;
        private Long id;
        //菜品名称
        private String name;
        //菜品分类id
        private Long categoryId;
        //菜品价格
        private BigDecimal price;
        //商品码
        private String code;
        //图片
        private String image;
        //描述信息
        private String description;
        //0 停售 1 起售
        private Integer status;
        //顺序
        private Integer sort;
        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime createTime;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private LocalDateTime updateTime;
        @TableField(fill = FieldFill.INSERT)
        private Long createUser;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Long updateUser;
        //是否删除
        private Integer isDeleted;
    }
    登入後複製

    Setmeal.java:方案實體

    package com.itheima.reggie.entity;
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    import java.io.Serializable;
    import java.math.BigDecimal;
    import java.time.LocalDateTime;
    /**
     * 套餐
     */
    @Data
    public class Setmeal implements Serializable {
        private static final long serialVersionUID = 1L;
        private Long id;
        //分类id
        private Long categoryId;
        //套餐名称
        private String name;
        //套餐价格
        private BigDecimal price;
        //状态 0:停用 1:启用
        private Integer status;
        //编码
        private String code;
        //描述信息
        private String description;
        //图片
        private String image;
        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime createTime;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private LocalDateTime updateTime;
        @TableField(fill = FieldFill.INSERT)
        private Long createUser;
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Long updateUser;
        //是否删除
        private Integer isDeleted;
    }
    登入後複製

    3.2 核心程式碼

    CategoryServiceImpl.java

    package com.itheima.reggie.service.impl;
    import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.itheima.reggie.common.CustomException;
    import com.itheima.reggie.entity.Category;
    import com.itheima.reggie.entity.Dish;
    import com.itheima.reggie.entity.Setmeal;
    import com.itheima.reggie.mapper.CategoryMapper;
    import com.itheima.reggie.service.CategoryService;
    import com.itheima.reggie.service.DishService;
    import com.itheima.reggie.service.SetmealService;
    import org.springframework.stereotype.Service;
    import javax.annotation.Resource;
    /**
     * @author jektong
     * @date 2022年05月06日 21:44
     */
    @Service
    public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
        @Resource
        private DishService dishService;
        @Resource
        private SetmealService setmealService;
        /**
         * 根据ID删除分类,分类之前需要判断
         * @param id
         */
        @Override
        public void remove(Long id) {
            LambdaQueryWrapper<Dish> dishLambdaQueryWrapper =  new LambdaQueryWrapper<>();
            // 查询当前分类是否关联了菜品,若关联菜品,抛出异常
            dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);
            int count = dishService.count(dishLambdaQueryWrapper);
            if(count > 0){
                // 已经关联菜品,抛出异常
                throw new CustomException("当前分类已关联菜品,不可删除");
            }
            // 查询当前分类是否关联了套餐,若关联菜品,抛出异常
            LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper =  new LambdaQueryWrapper<>();
            setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);
            int count1 = setmealService.count(setmealLambdaQueryWrapper);
            if(count>0){
                // 已经关联套餐,抛出异常
                throw new CustomException("当前分类已关联套餐,不可删除");
            }
            // 正常删除分类
            super.removeById(id);
        }
    }
    登入後複製

    前面自訂例外類別加入:## #
    /**
         * 异常处理方法
         * @param customException
         * @return
         */
        @ExceptionHandler(CustomException.class)
        public R<String> exceptionHandler(CustomException customException){
            log.error(customException.getMessage());
            return R.error(customException.getMessage());
        }
    登入後複製
    ###CustomException.java###
    package com.itheima.reggie.common;
    /**
     * @author jektong
     * @date 2022年05月10日 22:26
     */
    public class CustomException extends RuntimeException{
        public CustomException(String msg){
            super(msg);
        }
    }
    登入後複製
    ###四.修改分類######修改分類很簡單,根據分類ID修改就可以了,程式碼如下:###
    @PutMapping
    public R<String> update(@RequestBody Category category){
      log.info("修改分类信息{}" + category);
      categoryService.updateById(category);
      return R.success("分类修改成功");
    }
    登入後複製

    以上是Java新增菜色與分頁查詢怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板