某马瑞吉外卖单体架构项目完整开发文档,基于 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/");
    }
}
重启应用程序,再次访问便可以访问成功了:





















