某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 + JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。
相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PDe_7uIg?pwd=x548
提取码:x548
文章目录
- 1.数据库环境搭建
- 1.1 新建数据库
- 1.2 导入表结构
- 1.3 数据表分析
- 2.项目搭建
- 2.1 创建 Spring Boot 项目
- 2.2 导入相关依赖
- 2.3 配置基本参数
- 2.4 编写启动类
- 3.导入前端资源
1.数据库环境搭建
数据库操作笔者使用的是 Navicat 进行相关操作,当然你也可以使用纯命令行的方式或者其他的图形化软件。
1.1 新建数据库
新建一个项目对应的数据库,基本创建信息如下:
SQL 语句如下:
create database reggie character set utf8mb4;
1.2 导入表结构
数据表路径:瑞吉外卖/瑞吉外卖项目/资料/数据模型/db_reggie.sql
选中数据库,右击选择【运行 SQL 文件…】,然后在【文件】一栏找到上述脚本文件,最后点击【开始】即可:
如果运行执行成功我们应该可以看到如下日志信息:
刷新后便可看到导入的数据表,大致如下:
如果是通过命令行的方式则对应执行如下命令即可:
use reggie; source <db_reggie.sql路径>;
注意:如果使用命令行的方式,则 sql 文件的路径不应该包含中文,否则可能会解析错误。
1.3 数据表分析
序号 | 表名 | 说明 |
---|---|---|
1 | employee | 员工表 |
2 | category | 菜品和套餐分类表 |
3 | dish | 菜品表 |
4 | setmeal | 套餐表 |
5 | setmeal_dish | 套餐菜品关系表 |
6 | dish_flavor | 菜品口味关系表 |
7 | user | 用户表(C 端) |
8 | address_book | 地址簿表 |
9 | shopping_cart | 购物车表 |
10 | orders | 订单表 |
11 | order_detail | 订单明细表 |
2.项目搭建
2.1 创建 Spring Boot 项目
Spring Boot 项目基本信息如下:
点击下一步,选择 Spring Boot 版本和相关依赖:
上面我们选择了几个基本依赖,如 lombok、Spring Web 和 MySQL Driver。有些依赖 Spring Boot 并没有提供对应的 Starter,因此需要手动导入,完整的 pom.xml 文件见下节。
注意:项目创建完毕后,注意检查项目的编码、Maven 仓库配置、JDK 配置等。
2.2 导入相关依赖
由于笔者使用的是 Spring Boot 2.7.11,所以对部份依赖的版本进行了一些调整。相比于原教程而言,依赖版可能本会有些许变化,具体以下面的文件内容为准。
下面是完整的 pom.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.javgo</groupId>
<artifactId>reggie_take_out</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>reggie_take_out</name>
<description>reggie_take_out</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.3 配置基本参数
本项目笔者主要使用 YAML 格式的 application 配置文件,完整的配置文件内容如下:
server:
# 服务器端口(默认为8080)
port: 8080
spring:
# 数据源配置
datasource:
# 德鲁伊连接池
druid:
# 数据库驱动(Spring Boot 2.0以上版本会自动根据URL识别,无需配置)
driver-class-name: com.mysql.cj.jdbc.Driver
# 数据库连接地址
url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
# 数据库连接用户名
username: root
# 数据库连接密码
password: 123456
# MyBatis Plus 相关配置
mybatis-plus:
# 实体类所在包
type-aliases-package: cn.javgo.reggie_take_out.entity
configuration:
# 驼峰命名转换
map-underscore-to-camel-case: true
# 打印SQL语句,即会在控制台打印SQL语句,方便调试
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
# 配置主键生成策略,自增
id-type: assign_id
注意:上面的数据库连接信息(URL、用户名和密码),胖友需要根据自己的实际情况进行调整。
2.4 编写启动类
Spring Boot 工程创建完成其实已经就为我们在项目根路径下创建了一个 *Application
启动类了:
我们直接在该类上进行简单的修改即可,需求就是在项目启动后自动打印 “项目启动成功相关字样”,要完成这个需求我们可以通过实现 ApplicationRunner
或者 CommandLineRunner
接口来实现。这里我们以实现 CommandLineRunner
接口的方式来进行实现,在项目启动后通过 lombok 提供的 @Slf4j
注解在控制台打印启动成功的字符串信息。
完整代码如下:
@Slf4j
@SpringBootApplication
public class ReggieTakeOutApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(ReggieTakeOutApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
log.info("项目启动成功......");
}
}
当然,为了更加优雅一些,我们还可以直接注册一个 CommandLineRunner
Bean 也能完成同样的效果,下面是一个等效代码:
@Slf4j
@SpringBootApplication
public class ReggieTakeOutApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieTakeOutApplication.class, args);
}
@Bean
CommandLineRunner commandLineRunner(){
return args -> log.info("项目启动成功......");
}
}
配合上 Lambda 表达式之后,是不是简洁了许多呢?OK,现在启动项目即可在控制台看到如下信息:
3.导入前端资源
资源路径:
- 后台管理系统页面:瑞吉外卖/瑞吉外卖项目/资料/前端资源/backend
- 移动端页面:瑞吉外卖/瑞吉外卖项目/资料/前端资源/front
复制上述两个文件,直接粘贴到项目的 src/main/resources/static
目录下:
引入静态文件后,建议刷新一下,否则有时候可能会找不到静态资源。IDEA 右侧点击 Maven 图标,点击刷新按钮即可:
下面我们直接启动应用进行访问测试,如访问后台首页 http://localhost:8080/static/backend/index.html
可见访问失败了,返回 404 服务端错误,这是因为将对于静态资源的访问视为了一次请求,但是服务端却没有对应处理该请求造成的。要解决这个问题也很简单,我们准备一个配置类继承 WebMvcConfigurationSupport
重写 addResourceHandlers
方法设置静态资源映射即可。
完整代码如下:
package cn.javgo.reggie_take_out.config;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@SpringBootConfiguration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 配置静态资源路径
* @param registry 资源处理器注册器
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
}
重启应用程序,再次访问便可以访问成功了: