java实现简易外卖订餐系统

Java实现简易外卖订餐系统攻略

简介

本项目是一个简单的外卖订餐系统,使用Java语言实现,主要功能包括选择菜品,下单,查询订单等。

准备工作

在开始实现之前,我们需要完成一些准备工作。

环境准备

  1. 安装JDK,并配置环境变量。

  2. 安装Eclipse或IntelliJ IDEA等Java开发工具。

技术选型

  1. 使用Java语言编写。

  2. 使用Maven管理依赖。

  3. 使用Spring框架进行依赖注入和AOP编程。

  4. 使用MyBatis框架进行数据访问。

  5. 使用MySQL作为数据库。

实现步骤

1. 创建数据库

本系统中使用的是MySQL数据库。

在MySQL中创建一个名为"order_system"的数据库,执行以下SQL语句:

CREATE DATABASE order_system;

2. 创建表

在"order_system"数据库中创建三个表:

2.1 customer

存储顾客信息的表。

CREATE TABLE `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `phone` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.2 menu

存储菜单信息的表。

CREATE TABLE `menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `price` float NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.3 order

存储订单信息的表。

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `menu_id` int(11) NOT NULL,
  `count` int(11) NOT NULL,
  `total_price` float NOT NULL,
  `create_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. 创建Java工程

使用Eclipse或IntelliJ IDEA等Java开发工具,创建一个Maven工程。

4. 配置数据源和MyBatis

在pom.xml文件中添加以下依赖:

<!--数据源-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.20</version>
</dependency>

<!--MyBatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

在application.yml文件中配置数据源和MyBatis:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/order_system?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    # druid配置
    type: com.alibaba.druid.pool.DruidDataSource
    initial-size: 5
    min-idle: 5
    max-active: 20
    max-wait: 60000
    # 配置Druid监控
    filters: stat,wall,log4j
    use-global-data-source-stat: false
    connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: cn.edu.nju.entity

5. 创建实体类和Mapper

5.1 实体类

在src/main/java/cn/edu/nju/entity目录下创建Customer、Menu、Order三个类,分别对应数据库中的三个表。

public class Customer {
    private int id;
    private String name;
    private String phone;
    //...
}

public class Menu {
    private int id;
    private String name;
    private float price;
    //...
}

public class Order {
    private int id;
    private int customerId;
    private int menuId;
    private int count;
    private float totalPrice;
    private Date createTime;
    //...
}

5.2 Mapper

在src/main/java/cn/edu/nju/mapper目录下创建CustomerMapper、MenuMapper、OrderMapper三个接口,用于操作数据库中的三个表。

public interface CustomerMapper {
    List<Customer> findAll();
    void insert(Customer customer);
    //...
}

public interface MenuMapper {
    List<Menu> findAll();
    //...
}

public interface OrderMapper {
    void insert(Order order);
    List<Order> findByCustomerId(int customerId);
    //...
}

在src/main/resources/mapper目录下创建这三个接口的xml文件CustomerMapper.xml、MenuMapper.xml、OrderMapper.xml。

用于实现数据库的增删改查操作。

6. 编写业务逻辑和控制器

6.1 业务逻辑

在src/main/java/cn/edu/nju/service目录下创建CustomerService、MenuService、OrderService三个类,用于实现业务逻辑。

@Service
public class CustomerService {
    // 使用注入的CustomerMapper进行数据库操作
    @Autowired
    private CustomerMapper customerMapper;
    public void add(Customer customer) {
        customerMapper.insert(customer);
    }
    public List<Customer> findAll() {
        return customerMapper.findAll();
    }
    //...
}

@Service
public class MenuService {
    @Autowired
    private MenuMapper menuMapper;
    public List<Menu> findAll() {
        return menuMapper.findAll();
    }
    //...
}

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    public void addOrder(Order order) {
        orderMapper.insert(order);
    }
    public List<Order> findByCustomerId(int customerId) {
        return orderMapper.findByCustomerId(customerId);
    }
    //...
}

6.2 控制器

在src/main/java/cn/edu/nju/controller目录下创建OrderController控制器类,用于实现外部访问API。

@Controller
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private OrderService orderService;
    @Autowired
    private MenuService menuService;
    @Autowired
    private CustomerService customerService;
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public String addOrder(@RequestParam("customerId")int customerId, @RequestParam("menuId")int menuId, @RequestParam("count")int count) {
        Menu menu = menuService.findById(menuId);
        if(menu == null) {
            return "该菜品不存在";
        } else {
            Order order = new Order();
            order.setCustomerId(customerId);
            order.setMenuId(menuId);
            order.setCount(count);
            order.setTotalPrice(count * menu.getPrice());
            order.setCreateTime(new Date());
            orderService.addOrder(order);
            return "下单成功";
        }
    }
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    @ResponseBody
    public String getOrderList(@RequestParam("customerId")int customerId) {
        List<Order> orderList = orderService.findByCustomerId(customerId);
        if(orderList.isEmpty()) {
            return "未查询到订单";
        } else {
            StringBuilder result = new StringBuilder();
            for(Order order : orderList) {
                result.append("订单编号:").append(order.getId())
                        .append(" 菜品名称:").append(menuService.findById(order.getMenuId()).getName())
                        .append(" 数量:").append(order.getCount())
                        .append('\n');
            }
            return result.toString();
        }
    }
    //...
}

7. 测试

使用Postman等工具,测试系统的所有API接口,确保系统实现正确。

示例说明

示例1:添加顾客

请求URL:http://localhost:8080/customer/add
请求参数:
name=张三
phone=13812345678

返回结果:
添加成功

示例2:下单

请求URL:http://localhost:8080/order/add
请求参数:
customerId=1
menuId=1
count=2

返回结果:
下单成功

示例3:查询订单

请求URL:http://localhost:8080/order/list
请求参数:
customerId=1

返回结果:
订单编号:1 菜品名称:宫爆鸡丁 数量:2

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现简易外卖订餐系统 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Java的Struts框架报错“ActionMessageException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“InvalidUserException”错误。这个错误通常由以下原因之一起: 用户无效:如果用户无效,则可能会出现此错误。在这种情况下,需要检查用户是否有效以解决此问题。 配置错误:如果配置文件中没有正确配置,则可能会现此错误。在这种情况下,检查文件以解决此问题。 以下是两个实例: 例 1 如果用户无效,则可…

    Java 2023年5月5日
    00
  • java中的反射应用实现

    Java中的反射机制提供了一种在运行时检查和修改类、接口、方法和变量等的工具,可以帮助程序员实现更加灵活和动态的编程。 反射基础 在Java中,每个class都有一个Class对象,反射机制就是通过这个对象来获取和操作类的信息。可以使用以下方法来获得一个类的Class对象: Class clazz = Person.class; //第一种方式 Class …

    Java 2023年5月19日
    00
  • Java_Spring之基于注解的 AOP 配置

    下面是关于Java Spring基于注解的AOP配置的完整攻略: 什么是基于注解的AOP配置 AOP,全称为Aspect Oriented Programming,即面向切面编程,是一种编程思想,用于解决通用业务逻辑和系统模块化的问题。在Java Spring框架中,AOP属于其核心模块,提供了一些注解,用于声明切点和对应的切面,从而实现对代码的拦截和增强。…

    Java 2023年5月31日
    00
  • sqlite数据库的介绍与java操作sqlite的实例讲解

    SQLite数据库介绍 SQLite是一款轻量级、自包含的数据库引擎。它可以跨平台运行,同时保持了一致的API,使得它易于在多个平台下使用。它以简单、易用、可靠、高效等特点俘获了众多开发者的心。下面介绍一下如何在Java中操作SQLite。 Java操作SQLite的实例 环境准备 在开始之前,您需要先下载和安装SQLite的JDBC驱动。您可以从SQLit…

    Java 2023年5月19日
    00
  • Spring切面优先级与基于xml的AOP实现方法详解

    Spring切面优先级与基于XML的AOP实现方法详解 在Spring中,切面是一种用于横切关注点的模块化方式。切面可以定义在XML文件中,也可以使用注解方式定义。本文将详细讲解Spring切面优先级和基于XML的AOP实现方法。 1. Spring切面优先级 在Spring中,切面的优先级是由切面的顺序决定的。切面的顺序可以通过实现Ordered接口或使用…

    Java 2023年5月18日
    00
  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    下面我来详细讲解”es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解”的完整攻略。 概述 在实现微服务架构中,往往需要采用分布式搜索引擎来实现高可用和高性能的搜索功能,而ES(Elasticsearch)是分布式搜索引擎中最常用的一种。Spring Boot是一种快速开发框架,Spring Cloud是为实现微服…

    Java 2023年5月19日
    00
  • Apache Kafka 分区重分配的实现原理解析

    Apache Kafka 分区重分配的实现原理解析 在 Apache Kafka 中,分区重分配是指在集群中添加或删除 Broker 时必须进行的操作。重分配是将主题的分区重新分配给集群中的 Brokers 的过程。在重分配完成后,每个 Broker 都应该被分配到相同数量的分区,从而使集群完全平衡。 重分配过程 当新增或者删除 Broker 后,集群控制器…

    Java 2023年5月20日
    00
  • 关于微信小程序获取小程序码并接受buffer流保存为图片的方法

    关于微信小程序获取小程序码并接受buffer流保存为图片的方法可以分为以下几步: 创建 API 方法 在小程序中,我们可以通过wx-api创建必要的API方法。这不仅可以帮助我们更好地组织代码,还可以使代码更具可读性和可维护性。 function getMiniProgramCode (path, width, callback) { wx.api.requ…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部