• 【外卖项目实战开发一】



    1、软件开发整体介绍

    软件开发流程
    在这里插入图片描述

    角色分工
    在这里插入图片描述

    软件环境
    在这里插入图片描述

    2、外卖项目介绍

    项目介绍
    在这里插入图片描述

    技术选型
    在这里插入图片描述

    功能架构

    在这里插入图片描述

    角色
    在这里插入图片描述

    3、环境搭建

    数据库环境搭建

    创建数据库

    在这里插入图片描述

    执行SQL脚本

    在这里插入图片描述

    数据表

    在这里插入图片描述

    maven项目搭建

    在这里插入图片描述

    添加依赖:

        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.4.5version>
            <relativePath/> 
        parent>
        <groupId>com.kagroupId>
        <artifactId>reggieartifactId>
        <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>
    
    • 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

    application.yml

    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: 1234
    mybatis-plus:
      configuration:
        #address_book->AddressBook
        #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
        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
    • 21

    配置application启动类

    @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

    把前端的静态资源放在resource目录
    在这里插入图片描述

    设置静态资源映射

    @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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    启动项目,访问http://localhost:8080/backend/index.html
    在这里插入图片描述

    4、后台登录功能开发

    需求分析

    • 登录页面展示(http://localhost:8080/backend/page/login/login.html)
      image

    • 查看登录请求信息
      image

    • 数据模型(employee表)
      image

    代码开发

    • 创建实体类Employee,和employee表进行映射
    @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
    • 创建Controller,Service,Mapper

    EmployeeMapper

    @Mapper
    public interface EmployeeMapper extends BaseMapper<Employee> {
    }
    
    • 1
    • 2
    • 3

    EmployeeService

    public interface EmployeeService extends IService<Employee> {
    }
    
    • 1
    • 2

    EmployeeServiceImpl

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

    EmployeeController

    @Slf4j
    @RestController
    @RequestMapping("/employee")
    public class EmployeeController {
        @Autowired
        private EmployeeServiceImpl employeeService;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 导入返回结果类R
      • 此类是一个通用结果类,服务端响应的所有结果最终都会包装成此种类型返回给前端页面
    @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
    • 在Controller中创建登录方法
      image

    image

    @Slf4j
    @RestController
    @RequestMapping("/employee")
    public class EmployeeController {
        @Autowired
        private EmployeeServiceImpl employeeService;
    
        @PostMapping("/login")
        public R<Employee> logib(HttpServletRequest request, @RequestBody Employee employee) {
    
            //1、将页面提交的密码进行md5加密处理
            String password = employee.getPassword();
            password = DigestUtils.md5DigestAsHex(password.getBytes());
    
            //2、根据页面提交的用户名来查数据库
            LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(Employee::getUsername, employee.getUsername());
            Employee emp = employeeService.getOne(queryWrapper);
    
            //3、如果没有查询到则返回失败结果
            if (emp == null) {
                return R.error("登录失败");
            }
    
            //4、比对密码,如果不一致则返回失败结果
            if (!emp.getPassword().equals(password)) {
                return R.error("密码错误");
            }
    
            //5、查看员工状态,如果已禁用状态,则返回员工已禁用结果
            if (emp.getStatus() == 0) {
                return R.error("账号已禁用");
            }
    
            //6、登录成功,将用户id存入Session并返回成功结果
            request.getSession().setAttribute("employee", emp.getId());
            return R.success(emp);
        }
    }
    
    • 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

    5、后台退出功能开发

    需求分析
    image

    代码实现

    在Controller中创建退出方法

        //员工退出
        @PostMapping("/logout")
        public R<String> logout(HttpServletRequest request){
            //清理Session中保存的当前员工登录的id
            request.getSession().removeAttribute("employee");
            return R.success("退出成功");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    投屏工具AirDroid Cast竟然成为手机拍照神助攻?快来看看怎么操作
    【我的OpenGL学习进阶之旅】收集的3D渲染技术之UVMap和Mesh相关资料
    Docker安装Jenkins
    Android 14 正式发布,已经在 AOSP 中上线
    js数据类型判断的五种方法及归纳。
    [黑马程序员Pandas教程]——分组与分箱
    Spring @EnableAutoConfiguration注解简介及使用示例
    GIT中对子仓库的使用方法介绍
    文件包含漏洞
    iOS- flutter flavor 多环境Configurations配置
  • 原文地址:https://blog.csdn.net/m0_52896752/article/details/127874607