瑞吉外卖 - 开发环境搭建(2)

news2025/1/20 16:58:10

某马瑞吉外卖单体架构项目完整开发文档,基于 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 数据表分析

序号表名说明
1employee员工表
2category菜品和套餐分类表
3dish菜品表
4setmeal套餐表
5setmeal_dish套餐菜品关系表
6dish_flavor菜品口味关系表
7user用户表(C 端)
8address_book地址簿表
9shopping_cart购物车表
10orders订单表
11order_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/");
    }
}

重启应用程序,再次访问便可以访问成功了:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络编程启蒙

文章目录 局域网、广域网WAN口LAN口那么什么是局域网和广域网呢&#xff1f; IP地址IPV4动态规划ipNAT IPV6IPV6的普及IPV6的应用 端口号协议协议分层协议分层的好处 OSI物理层数据链路层网络层&#xff08;全局&#xff09;传输层负责应用层网络设备所在分层网络分层中的一组重…

mybatis-plus实现乐观锁和悲观锁

目录 定义 场景 乐观锁与悲观锁 模拟修改冲突数据库中增加商品表 乐观锁实现 悲观锁 定义 1&#xff09;乐观锁 首先来看乐观锁&#xff0c;顾名思义&#xff0c;乐观锁就是持比较乐观态度的锁。就是在操作数据时非常乐观&#xff0c;认为别的线程不会同时修改数据&#x…

红旅在线语料库网站 开发笔记

桂林红色旅游资源在线语料库网站 &#xff08;Guilin Red Culture Corpus&#xff09;提供双语文本检索和分享功能。供英语、翻译相关专业的爱好者&#xff0c;学生和老师学习使用。 该网站是对BiCorpus开源项目的二次开发(已获得原作者授权)。 项目仓库&#xff1a;RedCorpu…

小米miui14更新公测

一人内测&#xff0c;全员公测&#xff0c;懂得都懂[滑稽] 必应搜索醉里博客http://202271.xyz?miui 1月份有一部分机型就要公测了&#xff0c;相关用户愿意等的可以再等等。 本篇介绍最简单粗暴的替换法&#xff0c;不管你刷没刷过机都可以用这个方法偷渡MIUI14 ★★★评论…

区间预测 | MATLAB实现QRCNN-GRU卷积门控循环单元分位数回归时间序列区间预测

区间预测 | MATLAB实现QRCNN-GRU卷积门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRCNN-GRU卷积门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRCNN-GRU分位数回归卷积门控循环…

可靠性设计:元器件、零部件、原材料的选择与控制

通常&#xff0c;一个产品由各种基础产品(包括各种元器件、零部件等)构成。由于元器件、零部件的数量、品种众多&#xff0c;所以他们的性能、可靠性、费用等参数对整个系统性能、可靠性、寿命周期费用等的影响极大。 原材料则是各种基础产品的基本功能赖以实现的基础&#xf…

储氢合金/金属氢化物床层有效导热系数的数学模型

最近看到一篇有关“储氢合金/金属氢化物床层有效导热系数的数学模型”的论文&#xff0c;文章DOI&#xff1a;10.1016/j.energy.2023.127085&#xff0c;文章提到的数学物理模型还算好理解一些&#xff0c;特意分享给各位感兴趣的大佬。 一、物理模型简图和假设 文章里&#xf…

数模之Apriori关联算法

一、问题 中医证型的关联规则挖掘 背景&#xff1a; 中医药治疗乳腺癌有着广泛的适应证和独特的优势。从整体出发&#xff0c;调整机体气血、阴阳、脏腑功能的平衡&#xff0c;根据不同的临床证候进行辨证论治。确定“先证而治”的方向&#xff1a;即后续证侯尚未出现之前&am…

前后端分离博客】学习笔记04 --- 文件上传-策略模式

一、思路 我们定义一个接口&#xff08;就比如接下来要实现的文件上传接口&#xff09;我们定义所需要实现的策略实现类 A、B、C、D&#xff08;也就是项目中所使用的四种策略阿里云Oss上传、腾讯云Cos上传、七牛云Kodo上传、本地上传&#xff09;我们通过策略上下文来调用策略…

基础IO(一)

基础IO&#xff08;一&#xff09; 1.文件基础概念2.C语言接口回顾3.系统接口4.文件系统调用5.三个标准6.输出缓冲区 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff1a;【Linux的…

股票K线基础知识2

光头光脚阳线 光头光脚阳线形态与特征描述 光头光脚阳线表示股票的最高价与收盘价相同&#xff0c;最低价与开盘价一样。光头光脚阳线上下不带影线&#xff0c;表明从一开盘买方就积极进攻&#xff0c;中间也可能出现买方与卖方的斗争&#xff0c;但买方发挥了最大力量。始终占…

18.JAVA之三大框架Spring、IOC和DI、拦截器、MVC项目、Mybatis持久层、动态SQL、SSM

一、Spring框架 1.1概述 其中最核心的是&#xff1a;IoC控制反转、DI依赖注入、Bean工厂、SpringAOP面向切面编程、事务控制。 Spring是一个开源框架&#xff0c;是为了解决企业应用程序开发复杂性而创建的。 SpringMVC框架用来接受浏览器的请求和给浏览器做出响应 Mybatis…

C++:设计一个线程安全的队列

文章目录 1. 目的2. 实现&#xff1f;验证&#xff01;makefileQueue 类的 public 成员单元测试 3. 实现 Queue 类的方案 1. 目的 串行的程序只用到单个 CPU 核心&#xff0c; 希望加速整个程序&#xff0c; 考虑使用多线程加速。典型情况下可以找到生产者、消费者&#xff0c…

基于ESP或ESP8266 单通道Lorawan网关硬件制作

软件代码设计资料下载链接》》 基于 Comresult PCB 的单通道网关 介绍 这是 ESP8266 LoRa 网关的最新版本。基于 ESP8266 mcu 的 LoRa 网关在过去几年里有了很大的发展。您想构建一个小型网关并保持尽可能多的 GPIO 引脚可用&#xff0c;Hallard 板是无与伦比的。另一种解决…

C++多态练习题

文章目录 1.虚函数的调用过程2.虚函数例题例题一例题二例题三例题四例题四 1.虚函数的调用过程 从汇编上面来看&#xff1a; []代表指针解引用操作 1.op指向test对象的首地址&#xff08;存放vptr&#xff09;&#xff0c;并存放在eax里面&#xff1b; 2.将eax所指之物(虚表…

使用不同的梯度下降法优化算法

本篇将使用以下几个梯度下降算法进行对比&#xff1a; 不使用任何的优化算法&#xff08;即整批数据集作为一次迭代更新梯度&#xff0c;也叫batch梯度下降&#xff0c;BGD&#xff09; mini-batch梯度下降法&#xff08;Mini-batchGD&#xff09; 使用具有动量的梯度下降算法&…

无标签背景图(负样本)的拼图代码

训练目标检测模型有个很令人头疼的问题&#xff0c;就是有些特征与要训练的特征较为相似的背景区域也被误检出来&#xff08;作为本应不该检测出来的负样本却被误检出为正样本的FP&#xff09;。 根据这一问题的解决办法&#xff0c;除了可以对正样本特征较为模糊或者有歧义的样…

Intel SGX学习笔记(2):用数组向Enclave传递5个数实现自增操作

写在前面 1、实现一个简单的Intel SGX的应用&#xff1a;非安全区定义初始化一个数组&#xff0c;数组里面存储5个数&#xff0c;然后向安全区&#xff08;enclave&#xff09;传入&#xff0c;在安全区中进行加减乘除&#xff0c;然后返回。 2、Intel SGX开发初学整体思路&a…

代码随想录算法训练营day39 | 62.不同路径,63. 不同路径 II

代码随想录算法训练营day39 | 62.不同路径&#xff0c;63. 不同路径 II 62.不同路径解法一&#xff1a;动态规划解法二&#xff1a;深度搜索&#xff08;明天补充&#xff09;解法三&#xff1a;数论&#xff08;明天补充&#xff09; 63. 不同路径 II解法一&#xff1a;动态规…

RuoYi-Vue下载与运行

一、源码下载 若依官网&#xff1a;RuoYi 若依官方网站 鼠标放到"源码地址"上&#xff0c;点击"RuoYi-Vue 前端分离版"。 跳转至Gitee页面&#xff0c;点击"克隆/下载"&#xff0c;复制HTTPS链接即可。 源码地址为&#xff1a;https://gitee.…