• SpringBoot 项目实战 ~ 1. 项目介绍及基础搭建



    GROW 模型: 目标(Goal)、现状(Reality)、方案(Options)、行动&决心(Way Forward & Will)


    在这里插入图片描述


    一、项目介绍

    1. 原型展示

    在这里插入图片描述



    2. 技术选型

    在这里插入图片描述



    3. 功能模块

    • 前端: 登录、地址管理、订单、菜单管理、购物车、下单、菜品浏览
    • 后端: 登录、退出、员工管理、订单管理、分类管理、菜品管理、套餐管理、菜品口味管理




    二、创建项目

    1. IDEA新建项目(mac 系统)

    在这里插入图片描述

    • 名称: reggie_tack_out
    • 位置: (确保无中文路径)
    • 语言: Java
    • 构建系统: Maven
    • JDK: 博主这里选择的是 18,可以按自己习惯


    2. 创建数据库(Navicat)

    ⑴. 链接本地数据库

    说明: 这里用的是可视化 Navicar 方法来创建数据库,也可以使用 SQL 语句来进行创建

    在这里插入图片描述

    • 连接名: 自定义名称
    • 主机名: localhost(使用本地数据库)
    • 端口号、用户名: 用默认即可
    • 密码: Navicat 设置的密码

    ⑵. 导入数据表

    数据表资源(数据模型/db_reggie.sql): https://gitee.com/yuan0_0/reggie_resourcer.git

    在这里插入图片描述

    流程: Navicat -> localhost -> 右键(运行 SQL 文件) -> 数据模型(xx.sql文件)

    ⑶. 项目配置文件

    编辑 pom.xml 文件:

    
    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
    
        
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.4.5version>
            <relativePath/> 
        parent>
        <groupId>org.examplegroupId>
        <artifactId>reggie_tack_outartifactId>
        <version>1.0-SNAPSHOTversion>
    
        
        <properties>
            <java.version>1.8java.version>
        properties>
    
        
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starterartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
                <scope>compilescope>
            dependency>
    
            <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>mybatis-plus-boot-starterartifactId>
                <version>3.4.2version>
            dependency>
    
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <version>1.18.20version>
            dependency>
    
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>fastjsonartifactId>
                <version>1.2.76version>
            dependency>
    
            <dependency>
                <groupId>commons-langgroupId>
                <artifactId>commons-langartifactId>
                <version>2.6version>
            dependency>
    
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <scope>runtimescope>
            dependency>
    
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druid-spring-boot-starterartifactId>
                <version>1.1.23version>
            dependency>
    
        dependencies>
    
        
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                    <version>2.4.5version>
                plugin>
            plugins>
        build>
    
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91

    ⑷. SpringBoot配置文件

    新建 src/main/resources/application.yml 文件:

    # Spring Boot配置文件
    server:
      port: 8080
    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: root
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    ⑷. 导入前端资源

    前端资源(前端资源/ backend + front): https://gitee.com/yuan0_0/reggie_resourcer.git

    导入静态资源文件:src/main/resources/bacnendsrc/main/resources/front

    ⑸. 配置静态资源映射关系

    新建 src/main/java/com/reggie/config/WebMvcConfig 类:

    //配置静态资源的映射
    package com.reggie.config;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    @Slf4j
    @Configuration
    public class WebMvcConfig extends WebMvcConfigurationSupport {
        /**
         * 设置静态资源映射
         * @param registry
         */
        @Override
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            // 设置日志,方便调试
            log.info("开始进入静态资源映射...");
            registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
            registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    ⑹. 启动类

    新建 src/main/java/com/reggie/ReggieApplication 类:

    //启动类
    package com.reggie;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @Slf4j
    @SpringBootApplication
    public class ReggieApplication {
        public static void main(String[] args) {
            SpringApplication.run(ReggieApplication.class, args);
            log.info("项目启动成功...");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ⑺. 启动项目

    浏览器路径: http://localhost:8080/backend/index.html

    在这里插入图片描述





    三、基础结构搭建

    1. 实体类

    新建 src/main/java/com/reggie/entity/Employee 类:

    package com.reggie.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;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44


    2. 控制器

    新建 src/main/java/com/reggie/controller/EmployeeController 类:

    package com.reggie.controller;
    
    import com.reggie.common.R;
    import com.reggie.entity.Employee;
    import com.reggie.service.EmployeeService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @Slf4j
    @RestController
    @RequestMapping("/employee")
    public class EmployeeController {
        @Autowired
        private EmployeeService employeeService;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19


    3. 映射接口

    新建 src/main/java/com/reggie/mapper/EmployeeMapper 接口:

    package com.reggie.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.reggie.entity.Employee;
    import org.apache.ibatis.annotations.Mapper;
    
    @Mapper
    public interface EmployeeMapper extends BaseMapper<Employee> {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9


    4. 服务接口

    新建 src/main/java/com/reggie/service/EmployeeService 接口:

    package com.reggie.service;
    
    import com.baomidou.mybatisplus.extension.service.IService;
    import com.reggie.entity.Employee;
    
    public interface EmployeeService extends IService<Employee> {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    5. 服务器实现类

    新建 src/main/java/com/reggie/service/impl/EmployeeServiceImpl 类:

    package com.reggie.service.impl;
    
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.reggie.entity.Employee;
    import com.reggie.mapper.EmployeeMapper;
    import com.reggie.service.EmployeeService;
    import org.springframework.stereotype.Service;
    
    @Service
    public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11


    6. 公共类

    新建 src/main/java/com/reggie/common/R 类:

    package com.reggie.common;
    
    import lombok.Data;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 通过返回结果类,服务端相应的数据都会封装成此对象
     * @param 
     */
    
    @Data
    public class R<T> {
    
        private Integer code; //编码:1成功,0和其它数字为失败
    
        private String msg; //错误信息
    
        private T data; //数据
    
        private Map map = new HashMap(); //动态数据
    
        public static <T> R<T> success(T object) {
            R<T> r = new R<T>();
            r.data = object;
            r.code = 1;
            return r;
        }
    
        public static <T> R<T> error(String msg) {
            R r = new R();
            r.msg = msg;
            r.code = 0;
            return r;
        }
    
        public R<T> add(String key, Object value) {
            this.map.put(key, value);
            return this;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41


  • 相关阅读:
    Dijkstral算法优化及经典递归题目
    【数据库】SQL 检索数据
    Python爬虫:安全与会话管理
    harbor 只读模式修改
    华钜同创:亚马逊卖家培训如何追溯流量变化
    把照片转换成pdf的格式
    什么是容错性(Fault Tolerance)?解释容错性的实现方法
    【T+】删除/取消畅捷通T+软件登录账套后的“查看认证”按钮
    MySQL百万数据深度分页优化思路分析
    luffy-(7)
  • 原文地址:https://blog.csdn.net/weixin_45137565/article/details/126115369