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);
以上就是完整的点餐后端系统的实现。你可以根据实际需求进一步扩展和完善这个系统。