当前位置:

首页 > 编程开发 > Java新增菜品与分页查询怎么实现

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

一.新增菜品1.1需求分析后台系统可以管理分类信息,分类菜品分类和套餐分类。当我们在后台系统添加菜品时需要选择一个菜品分类。当我们在后台系统中添加一个套餐时需要选择一个套餐分类,在移动端也会按照菜品分类和套餐分类来展示对应的菜品和套餐。同时,在后台系统的分类管理页面分别添加菜品分类与套餐分类:添加菜品分类添加套餐分类数据模型:涉及一张表Category表:表对应的数据JavaBean为Category.javaCategory.javapackagecom.itheima.reggie.entity;im

    一. 新增菜品

    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
    说明值
    请求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
    相关文章 更多
    解决PHP递归报错:max_nesting_level限制与内存溢出处理
    解决PHP递归报错:max_nesting_level限制与内存溢出处理

    遇到PHP递归报错时,不要盲目调大max_nesting_level。本文教你区分Xdebug限制、内存耗尽和正则递归错误,提供代码级的终止条件优化与迭代替代方案,彻底解决栈溢出问题。

    PHP递归中static变量与引用传递的常见陷阱及调试
    PHP递归中static变量与引用传递的常见陷阱及调试

    本文分析PHP递归中static变量导致的状态污染及引用传递引发的共享数据修改问题。提供具体的代码复现、缓存键设计建议及调试打印技巧,帮助开发者避免隐蔽的逻辑错误。

    PHP递归性能优化技巧与迭代替代方案
    PHP递归性能优化技巧与迭代替代方案

    解析PHP递归函数在树形数据处理中的性能瓶颈,提供预加载数据消除I/O、使用显式栈替代深层递归的实战方案,帮助开发者在代码可读性与执行效率间做出合理取舍。

    Java测试中怎么使用Mockito模拟依赖对象
    Java测试中怎么使用Mockito模拟依赖对象

    详细讲解在Java单元测试中如何使用Mockito模拟依赖对象,包括引入依赖、创建Mock、打桩返回值、行为验证以及Mock与Spy的核心差异和常见陷阱排查。

    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。