第一篇:瑞吉外卖项目概述

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 第一篇:瑞吉外卖项目概述

4e70e88986a245e98b8dbb620cf13a8b.png


项目背景



时间:某年寒假


地点:菩提阁餐厅


人物:软件工程专业大学生小王,菩提阁餐厅老板老王,父子关系


事件:小王在寒假期间帮忙打理父亲的餐厅,发现每天客户订餐量非常大,但是餐厅还是传统的电话接单方式,效率低下而且容易漏单,所以决定利用学校所学知识开发一套在线订餐系统,并且系统开发完成后,还可以推销给其他餐厅,可以赚点外快


问题:由于小王在学校学习的知识以后端开发为主,对于前端页面的编写并不熟练,所以决定联系一下在软件公司做前端开发的表姐帮忙来编写页面


项目效果展示


624438d1c3704610967915a114a19480.png

f72bac5b587f4191952b02e1418344df.png


软件开发整体介绍


软件开发流程


bbbc989b12d34a2a88b8e5251ed0c32f.png


角色分工


689254914ab647ae866ffa9506776958.png


软件环境


开发环境(development):开发人员在开发阶段使用的环境,一般外部用户无法访问


测试环境(testing):专门给测试人员使用的环境,用于测试项目,一般外部用户无法访问


生产环境(production):即线上环境,正式提供对外服务的环境


瑞吉外卖项目介绍


项目介绍


产品原型,就是一款产品成型之前的一个简单的框架,就是将页面的排版布局展现出来,使产品的初步构思有一个可视化的展示。通过原型展示,可以更加直观的了解项目的需求和提供的功能。


产品原型展示


1.png


技术选型


2.png


角色

后台系统管理员:登录后台管理系统,拥有后台系统中的所有操作权限

后台系统普通员工:登录后台管理系统,对菜品、套餐、订单等进行管理

C端用户:登录移动端应用,可以浏览菜品、添加购物车、设置地址、在线下单等


开发环境搭建


数据库环境搭建


3.png

5.png


maven项目搭建


创建maven项目


1.png


导入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.6.6</version>
        <relativePath/>
    </parent>
    <groupId>com.itheima</groupId>
    <artifactId>reggie_take_out</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>reggie_take_out</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <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>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.23</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>


导入Spring Boot配置文件application.yml


server:
  port: 8081
spring:
  application:
    name: reggie_take_out
  datasource:
    druid:
      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:
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID


创建配置类WebMvcConfig,设置静态资源映射,否则无法访问页面

一般情况下访问的是static或者是templates


@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
//    设置静态资源映射
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("开始进行静态资源映射");
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:backend/");
        registry.addResourceHandler("/front/**").addResourceLocations("classpath:front/");
    }
}


后台登录功能开发


需求分析


1.页面原型展示


2.png


2.登录页面展示(页面位置:项目/resources/backend/page/login/login.html)


3.png


3.查看登录请求信息

通过浏览器调试工具(F12),可以发现,点击登录按钮时,页面会发送请求(请求地址为http://localhost:8080/employee/login)并提交参数(username和password)

此时报404,是因为我们的后台系统还没有响应此请求的处理器,所以我们需要创建相关类来处理登录请求


4.png


4.数据模型(employee表)


6.png


5.分析前端页面代码


7.png


代码开发


1.创建实体类Employee,和employee表进行映射


package com.itheima.reggie_take_out.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/*
* 员工实体类
*
*
* */
@Data
public class Employee implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    private String username;
    private String name;
    private String password;
    private String phone;
    private String sex;
    private String idNumber;  // 身份证号码
    private Integer status;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
    @TableField(fill = FieldFill.INSERT)
    private Long createUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;
}


2.创建Controller、Service、Mapper


dao层,这里只需要写一个接口就行,使用动态代理方式形成实体类。


@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {
}


service层,这一层实现


public interface EmployeeService extends IService<Employee> {
}


@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
}


功能测试


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
自然语言处理 iOS开发
iOS 国际化(多语言)如何指定默认语言
iOS 国际化(多语言)如何指定默认语言
703 0
|
存储 传感器 定位技术
【NI Multisim 14.0原理图设计基础——元器件分类】
一、元器件分类 NI Multisim 14.0不仅提供了数量众多的元器件符号图形,而且还设计了元器件的模型,并分门类地存储在各个元器件库中。下面按照元器件库的命名不同详细介绍常用的元器件。 1.电源库 单击“元器件”工具栏中的“放置源” 按钮,Sources 库的“系列”栏包括以下几种,如图所示: 电源(POWER-SOURCES):包括常用的交直流电源、数字地、地线、星形或三角形连接的三相电源、VCC、VDD、VEE、VSS 电压源,其元器件”栏下内容如图所示: 电压信号源(SIGNAL-VOLTAG…):包括交流电压、时钟电压、脉冲电压、指数电压、FM、AM等多种形式的电压信号,其“元器
21444 3
【NI Multisim 14.0原理图设计基础——元器件分类】
|
Web App开发 数据采集 JavaScript
Chrome开发者工具探秘:元素面板的神奇魔法与实战解析
Chrome开发者工具探秘:元素面板的神奇魔法与实战解析
460 0
|
存储 JSON 负载均衡
Token、Session、Cookies是什么?如何理解其不同?一文带你了解
这篇文章详细解释了Token、Session和Cookies的概念、作用及其区别,探讨了它们在维持HTTP无状态连接中用户状态的用途和优缺点,特别是Session的服务器端存储和Token的客户端存储特性,以及它们在不同场景下的应用。
Token、Session、Cookies是什么?如何理解其不同?一文带你了解
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
掌握从模型选型到部署优化的全流程
本文深入探讨了AI大模型的开发与应用,涵盖基础概念、模型架构、关键技术、训练方法、应用策略、评估优化及伦理安全七大核心内容。从人工智能的定义到深度学习、通用人工智能(AGI)的探索,再到Transformer架构、混合专家模型(MoE)等前沿技术,系统解析了构建智能系统的基石与工程效率的引擎。文章还介绍了提示工程、检索增强生成(RAG)、AI智能体等应用策略,强调了模型评估与优化的重要性,并探讨了AI伦理与安全的关键议题。适合希望全面了解AI大模型开发的技术人员与研究者参考。
678 0
|
开发者
(在线CAD控件)网页CAD实现粗糙度标注的方法
本文介绍了通过MxCAD二次开发实现机械制图中表面粗糙度符号的标注功能。表面粗糙度符号用于表示零件表面微观不平度,基本形式为三角形,可结合不同修饰(如加横线、小圆等)表达具体加工要求。文章解析了符号含义,并基于McDbCustomEntity类创建自定义实体,实现符号绘制、数据持久化、夹点设置等功能。此外,还提供了用户交互式标注方法,支持根据直线、圆弧或指定角度生成粗糙度标注。最后展示了效果演示及扩展开发示例,便于开发者进一步定制功能。
|
搜索推荐 开发者 UED
【开发者必看—运动篇】数据赋能运动App留存率再创新高
如何在拉新后促活并成功留存?如何减少新用户流失?
【开发者必看—运动篇】数据赋能运动App留存率再创新高
|
机器学习/深度学习 人工智能 自然语言处理
人工智能与未来医疗:AI技术在疾病诊断中的应用前景####
本文探讨了人工智能(AI)在现代医疗领域,尤其是疾病诊断方面的应用潜力和前景。随着技术的不断进步,AI正逐渐改变传统医疗模式,提高诊断的准确性和效率。通过分析当前的技术趋势、具体案例以及面临的挑战,本文旨在为读者提供一个全面的视角,理解AI如何塑造未来医疗的面貌。 ####
|
并行计算 算法 安全
面试必问的多线程优化技巧与实战
多线程编程是现代软件开发中不可或缺的一部分,特别是在处理高并发场景和优化程序性能时。作为Java开发者,掌握多线程优化技巧不仅能够提升程序的执行效率,还能在面试中脱颖而出。本文将从多线程基础、线程与进程的区别、多线程的优势出发,深入探讨如何避免死锁与竞态条件、线程间的通信机制、线程池的使用优势、线程优化算法与数据结构的选择,以及硬件加速技术。通过多个Java示例,我们将揭示这些技术的底层原理与实现方法。
1001 3
|
JavaScript 前端开发 Go
async vs defer 的区别
async vs defer 的区别
359 0