Java实现简易外卖订餐系统攻略
简介
本项目是一个简单的外卖订餐系统,使用Java语言实现,主要功能包括选择菜品,下单,查询订单等。
准备工作
在开始实现之前,我们需要完成一些准备工作。
环境准备
-
安装JDK,并配置环境变量。
-
安装Eclipse或IntelliJ IDEA等Java开发工具。
技术选型
-
使用Java语言编写。
-
使用Maven管理依赖。
-
使用Spring框架进行依赖注入和AOP编程。
-
使用MyBatis框架进行数据访问。
-
使用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技术站