0

0

Java新增菜品与分页查询怎么实现

PHPz

PHPz

发布时间:2023-05-20 13:10:06

|

1231人浏览过

|

来源于亿速云

转载

    一. 新增菜品

    1.1需求分析

    后台系统可以管理分类信息,分类菜品分类和套餐分类。当我们在后台系统添加菜品时需要选择一个菜品分类。

    当我们在后台系统中添加一个套餐时需要选择一个套餐分类,在移动端也会按照菜品分类和套餐分类来展示对应的菜品和套餐。

    Java新增菜品与分页查询怎么实现

    同时,在后台系统的分类管理页面分别添加菜品分类与套餐分类:

    添加菜品分类

    立即学习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员工实体的搭建。

    XPaper Ai
    XPaper Ai

    AI撰写论文、开题报告生成、AI论文生成器尽在XPaper Ai论文写作辅助指导平台

    下载

    1.2代码开发

    新增菜品分类与套餐分类请求的服务地址与提交的JSON数据结构相同,服务端只需提供一个方法即可:

    API
    说明
    请求URL /category
    请求数据 {
      "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 save(@RequestBody Category category){
            log.info("category:{}",category);
            categoryService.save(category);
            return R.success("新增分类成功");
        }
    }

    二. 分类信息分页查询

    分页查询与之前的员工信息查询是一样的,直接上代码:

    @GetMapping("/page")
        public R page(int page, int pageSize){
            // 分页构造
            Page pageInfo = new Page(page,pageSize);
            // 查询并排序
            LambdaQueryWrapper 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 implements CategoryService {
        @Resource
        private DishService dishService;
        @Resource
        private SetmealService setmealService;
        /**
         * 根据ID删除分类,分类之前需要判断
         * @param id
         */
        @Override
        public void remove(Long id) {
            LambdaQueryWrapper dishLambdaQueryWrapper =  new LambdaQueryWrapper<>();
            // 查询当前分类是否关联了菜品,若关联菜品,抛出异常
            dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);
            int count = dishService.count(dishLambdaQueryWrapper);
            if(count > 0){
                // 已经关联菜品,抛出异常
                throw new CustomException("当前分类已关联菜品,不可删除");
            }
            // 查询当前分类是否关联了套餐,若关联菜品,抛出异常
            LambdaQueryWrapper 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 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 update(@RequestBody Category category){
      log.info("修改分类信息{}" + category);
      categoryService.updateById(category);
      return R.success("分类修改成功");
    }

    相关文章

    java速学教程(入门到精通)
    java速学教程(入门到精通)

    java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    php源码安装教程大全
    php源码安装教程大全

    本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

    7

    2025.12.31

    php网站源码教程大全
    php网站源码教程大全

    本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

    4

    2025.12.31

    视频文件格式
    视频文件格式

    本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

    7

    2025.12.31

    不受国内限制的浏览器大全
    不受国内限制的浏览器大全

    想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

    7

    2025.12.31

    出现404解决方法大全
    出现404解决方法大全

    本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

    42

    2025.12.31

    html5怎么播放视频
    html5怎么播放视频

    想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

    4

    2025.12.31

    关闭win10系统自动更新教程大全
    关闭win10系统自动更新教程大全

    本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

    3

    2025.12.31

    阻止电脑自动安装软件教程
    阻止电脑自动安装软件教程

    本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

    3

    2025.12.31

    html5怎么使用
    html5怎么使用

    想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

    2

    2025.12.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Kotlin 教程
    Kotlin 教程

    共23课时 | 2.1万人学习

    C# 教程
    C# 教程

    共94课时 | 5.7万人学习

    Java 教程
    Java 教程

    共578课时 | 39.8万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号