当前位置: 首页 > news >正文

Day01 项目概述,环境搭建

软件开发整体介绍

软件开发流程

需求分析:需求规格说明书、产品原型

设计:UI 设计、数据库设计,接口设计

编码:项目代码、单元测试

测试:测试用例、测试报告

上线运维:软件环境安装、配置

角色分工

项目经理:对整个项目负责,任务分配,把控进度

产品经理:进行需求调研,输出需求调研文档,产品原型等

UI 设计师:根据产品原型输出界面效果图

架构师:项目整体架构设计,技术选型等

开发工程师:代码实现

测试工程师:编写测试用例,输出测试报告

运维工程师:软件环境搭建,项目上线

软件环境

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

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

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

苍穹外卖项目介绍

项目介绍

定位:专门为餐饮企业(餐厅,饭店)定制的一款软件产品

功能架构:体现项目中的业务模块

产品原型

产品原型:用于展示项目的业务功能,一般由产品经理进行设计

技术选型

技术选型:展示项目中使用到的技术框架和中间件等

开发环境搭建

前端环境搭建

因为这个项目的重点是后端的开发,所以前端的代码已经开发好,我们只要把前端项目运行起来,直接使用前端环境就可以了

前端工程基于 nginx 运行

注意:Nginx 目录必须放在没有中文的目录中才能正常运行!!

后端环境搭建

后端工程基于 maven 进行项目构建,并且进行分模块开发

用 idea 打开初始工程,了解项目的整体结构

使用 Git 进行项目代码的版本控制,具体操作:                                                                                创建 Git 本地仓库                                                                                                                            创建 Git 远程仓库                                                                                                                            将本地文件推送到 Git 远程仓库

首先创建本地仓库

如果它弹出窗口提示我们有错误不用管,直接点击 “commit” 即可

然后创建远程仓库

最后将本地文件推送到 Git 远程仓库

数据库环境搭建

通过数据库建表语句创建数据库表结构

前后端联调测试

后端的初始工程中已经实现了登录功能,直接进行前后端联调测试即可

首先在 idea 中确认编译通过

然后直接启动启动类

不要忘了将 yml 文件里的数据库密码修改成你自己的密码!!!

完善登录功能

问题:员工表中的密码是明文存储,安全性太低

措施:

        1:将密码加密后存储,提高安全性

        2:使用 MD5 加密方式对明文密码加密

注意这个过程是单向的。

步骤:

        1:修改数据库中明文密码,改为 MD5 加密后的密文

        2:修改 Java 代码,前端提交的密码进行 MD5 加密后再跟数据库中密码对比

package com.sky.service.impl;import com.sky.constant.MessageConstant;
import com.sky.constant.StatusConstant;
import com.sky.dto.EmployeeLoginDTO;
import com.sky.entity.Employee;
import com.sky.exception.AccountLockedException;
import com.sky.exception.AccountNotFoundException;
import com.sky.exception.PasswordErrorException;
import com.sky.mapper.EmployeeMapper;
import com.sky.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;@Service
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;/*** 员工登录** @param employeeLoginDTO* @return*/public Employee login(EmployeeLoginDTO employeeLoginDTO) {String username = employeeLoginDTO.getUsername();String password = employeeLoginDTO.getPassword();//1、根据用户名查询数据库中的数据Employee employee = employeeMapper.getByUsername(username);//2、处理各种异常情况(用户名不存在、密码不对、账号被锁定)if (employee == null) {//账号不存在throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND);}//密码比对//进行md5加密,然后再进行比对password = DigestUtils.md5DigestAsHex(password.getBytes());if (!password.equals(employee.getPassword())) {//密码错误throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);}if (employee.getStatus() == StatusConstant.DISABLE) {//账号被锁定throw new AccountLockedException(MessageConstant.ACCOUNT_LOCKED);}//3、返回实体对象return employee;}}

注意看第 43 行,Java 中有现成的 md5 方法,我们直接调用即可

导入接口文档

前后端分离开发流程

操作步骤

将课程资料中提供的项目接口导入 YApi

因为 YApi 官网我进不去,我直接用 Apifox

Swagger

介绍

使用 Swagger 你只需要按照它的规范定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。

官网:API Documentation & Design Tools for Teams | Swaggerhttps://swagger.io/

Knife4j 是为 Java MVC 框架集成 Swagger 生成 Api 文档的增强解决方案。

使用方式

1:导入 knife4j 的 maven 坐标

2:在配置类中加入 knife4j 相关配置

3:设置静态资源映射,否则接口文档页面无法访问

这里都是比较固定的

package com.sky.config;import com.sky.interceptor.JwtTokenAdminInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;/*** 配置类,注册web层相关组件*/
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {@Autowiredprivate JwtTokenAdminInterceptor jwtTokenAdminInterceptor;/*** 注册自定义拦截器** @param registry*/protected void addInterceptors(InterceptorRegistry registry) {log.info("开始注册自定义拦截器...");registry.addInterceptor(jwtTokenAdminInterceptor).addPathPatterns("/admin/**").excludePathPatterns("/admin/employee/login");}/*** 通过knife4j生成接口文档* @return*/@Beanpublic Docket docket() {log.info("准备生成接口文档...");ApiInfo apiInfo = new ApiInfoBuilder().title("苍穹外卖项目接口文档").version("2.0").description("苍穹外卖项目接口文档").build();Docket docket1 = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select()//指定生成接口需要扫描的包.apis(RequestHandlerSelectors.basePackage("com.sky.controller")).paths(PathSelectors.any()).build();return docket1;}/*** 设置静态资源映射* @param registry*/protected void addResourceHandlers(ResourceHandlerRegistry registry) {log.info("开始进行静态资源映射...");registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}
}

注意看上面的 url,就是我们配置类中映射的 url

通过 Swagger 就可以生成接口文档,那么我们就不需要 Yapi 了?

1:Yapi 是设计阶段使用的工具,管理和维护接口

2:Swagger 在开发阶段使用框架,帮助后端开发人员做后端接口测试

常用注解

通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

http://www.xdnf.cn/news/1264627.html

相关文章:

  • 【代码随想录day 14】 力扣 104.二叉树的最大深度
  • 【Nginx基础①】 | VS Code Remote SSH 环境下的静态资源与反向代理配置实践
  • 防御保护09
  • 【Unity3D实例-功能-跳跃】角色跳跃
  • 文件结构树的├、└、─ 符号
  • 机器学习及其KNN算法
  • 力扣 hot100 Day69
  • ISL9V3040D3ST-F085C一款安森美 ON生产的汽车点火IGBT模块,绝缘栅双极型晶体管ISL9V3040D3ST汽车点火电路中的线圈驱动器
  • P1044 [NOIP 2003 普及组] 栈
  • 项目一系列-第4章 在线接口文档 代码模板改造
  • day070-Jenkins自动化与部署java、前端代码
  • 深入解析K-means聚类:从原理到调优实战
  • 第七章:数据持久化 —— `chrome.storage` 的记忆魔法
  • Netty-Rest搭建笔记
  • 【感知机】感知机(perceptron)学习算法例题及详解
  • 在 Elasticsearch/Kibana (ELK Stack) 中搜索包含竖线 (|)​​ 这类特殊字符的日志消息 (msg 字段) ​确实需要转义
  • 基于LLM的Chat应用测试方法探索:系统化评估与持续优化
  • java分布式定时任务
  • B4263 [GESP202503 四级] 荒地开垦 题解
  • 操作系统:多线程模型(Multithreading Models)与超线程技术(Hyperthreading)
  • 飞算JavaAI深度解析:专为Java生态而生的智能引擎
  • YOLO-Count:用于文本到图像生成的可微分目标计数
  • C++中的继承:从基础到复杂
  • 【数据结构】排序(sort) -- 计数排序
  • Sum of Four Values(sorting and searching)
  • 文件管理从基础到高级:文件描述符、超大文件切片重组与快速删除实战
  • SVM实战:从线性可分到高维映射再到实战演练
  • 《在 Spring Boot 中安全使用 Qwen API-KEY:环境变量替代明文配置的最佳实践》
  • Word中怎样插入特殊符号
  • 智慧社区(九)——事务加持下的小区删除操作