快速搭建一个后端点餐系统

1.项目结构

假设我们使用spring boot框架来构建后端系统,项目结构如下:

- src
  - main
    - java
      - com
        - ali
          - order
            - OrderApplication.java
            - controller
              - MenuController.java
              - OrderController.java
            - service
              - MenuService.java
              - OrderService.java
            - model
              - MenuItem.java
              - Order.java
              - OrderItem.java
            - repository
              - MenuItemRepository.java
              - OrderRepository.java
    - resources
      - application.properties
      - data.sql

2.数据库设计

我们需要两个主要表:orders 和 menu_items。

Sql

CREATE TABLE orders (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    total_price DECIMAL(10, 2),
    order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE menu_items (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    price DECIMAL(10, 2)
);

CREATE TABLE order_items (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    order_id BIGINT NOT NULL,
    menu_item_id BIGINT NOT NULL,
    quantity INT NOT NULL,
    FOREIGN KEY (order_id) REFERENCES orders(id),
    FOREIGN KEY (menu_item_id) REFERENCES menu_items(id)
);
 

3.接口设计

我们需要定义一些API来处理订单和菜单项的操作
GET /menu: 获取所有菜单项。
POST /order: 创建一个新的订单。
GET /order/{id}: 获取指定订单的信息。

4.实现基本功能


接下来我们将用Java来实现这些功能

4.1 OrderApplication.java


这是 Spring Boot 应用的入口类。

package com.ali.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}
 

4.2 MenuController.java

处理菜单相关的HTTP请求

package com.ali.order.controller;

import com.ali.order.model.MenuItem;
import com.ali.order.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/menu")
public class MenuController {

    private final MenuService menuService;

    @Autowired
    public MenuController(MenuService menuService) {
        this.menuService = menuService;
    }

    @GetMapping
    public List<MenuItem> getAllMenuItems() {
        return menuService.getAllMenuItems();
    }
}

4.3 OrderController.java

处理订单相关的HTTP请求

package com.ali.order.controller;

import com.ali.order.model.Order;
import com.ali.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/order")
public class OrderController {

    private final OrderService orderService;

    @Autowired
    public OrderController(OrderService orderService) {
        this.orderService = orderService;
    }

    @PostMapping
    public Order createOrder(@RequestBody Order order) {
        return orderService.createOrder(order);
    }

    @GetMapping("/{id}")
    public Order getOrderById(@PathVariable Long id) {
        return orderService.getOrderById(id);
    }
}

4.4 MenuService.java

菜单项目相关的业务逻辑

package com.ali.order.service;

import com.ali.order.model.MenuItem;
import com.ali.order.repository.MenuItemRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class MenuService {

    private final MenuItemRepository menuItemRepository;

    @Autowired
    public MenuService(MenuItemRepository menuItemRepository) {
        this.menuItemRepository = menuItemRepository;
    }

    public List<MenuItem> getAllMenuItems() {
        return menuItemRepository.findAll();
    }
}
 

4.5 OrderService.java

订单相关的业务逻辑层

package com.ali.order.service;

import com.ali.order.model.Order;
import com.ali.order.model.OrderItem;
import com.ali.order.repository.OrderRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class OrderService {

    private final OrderRepository orderRepository;

    @Autowired
    public OrderService(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }

    public Order createOrder(Order order) {
        return orderRepository.save(order);
    }

    public Order getOrderById(Long id) {
        return orderRepository.findById(id).orElse(null);
    }
}

4.6 MenuItem.java

菜单项实体类

package com.ali.order.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class MenuItem {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    // Getters and Setters
}
 

4.7 Order.java

订单实体类

package com.ali.order.model;

import javax.persistence.*;
import java.util.List;

@Entity
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long userId;
    private double totalPrice;
    private String orderTime;

    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
    private List<OrderItem> items;

    // Getters and Setters
}


4.8 OrderItem.java

订单项实体类

package com.ali.order.model;

import javax.persistence.*;

@Entity
public class OrderItem {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private int quantity;

    @ManyToOne
    @JoinColumn(name = "order_id")
    private Order order;

    @ManyToOne
    @JoinColumn(name = "menu_item_id")
    private MenuItem menuItem;

    // Getters and Setters
}
 

4.9 MenuItemRepository.java

菜单项数据访问层接口

package com.ali.order.repository;

import com.ali.order.model.MenuItem;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MenuItemRepository extends JpaRepository<MenuItem, Long> {
}
 

4.10 OrderRepository.java

订单数据访问层接口

package com.ali.order.repository;

import com.ali.order.model.Order;
import org.springframework.data.jpa.repository.JpaRepository;

public interface OrderRepository extends JpaRepository<Order, Long> {
}
 

5.配置文件


在 src/main/resources/application.properties 中配置数据库连接信息。

Properties

spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

6.初始化数据

在 src/main/resources/data.sql 中初始化数据。

Sql

INSERT INTO menu_items (name, price) VALUES ('汉堡', 20.00);
INSERT INTO menu_items (name, price) VALUES ('薯条', 10.00);
INSERT INTO menu_items (name, price) VALUES ('可乐', 5.00);
 

以上就是完整的点餐后端系统的实现。你可以根据实际需求进一步扩展和完善这个系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值