苍穹外卖知识点总结(一)

简介

技术选型

展示项目中使用到的技术框架和中间件。

用户层:node.js        Vue.js        ElementUI        微信小程序        apache echarts

网关层:nginx

应用层:Spring Boot        Spring MVC        Spring Task        httpclient        Spring Cache        JWT        阿里云OSS        Swagger        POI        WebSocket

数据库:MySQL        Redis        mybatis        pagehelper        spring data redis

工具:Git        maven        junit        postman

后端环境搭建

熟悉项目的整体结构

sky-take-out        maven父工程,统一管理依赖版本,聚合其他子模块

sky-common        子模块,存放公共类,例如:工具类,常量类,异常类等

sky-pojo        子模块,存放实体类,VO,DTO等

sky-server        子模块,后端服务,存放配置文件,controller、service、mapper

关于什么是DTO、VO、entity?

entity        实体,通常与数据库中的表对应

DTO        数据传输对象,通常用于程序中各层之间传递数据

VO        视图对象,为前端展示数据提供对象

POJO        普通java对象,只有属性和对应的getter和setter

如何实用git进行版本管理?

Git对待数据的方式并非差异比较,而是采用快照的方式。Git把数据看作是对小型文件系统的一组快照。每次提交更新或者在Git中保存状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不再重新存储该文件,二十保留一个人链接指向之前存储的文件。Git对待数据更现实一个快照流。

Git的三种状态
  1. 已提交(committed):数据已经安全的保存在本地数据库中。
  2. 已修改(modified):已经修改了文件,但是还没有保存在数据库中。
  3. 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

由此引入Git项目的三个工作区域的概念:Git仓库、工作目录、和暂存区。

Git常用命令
获取git仓库
从现在目录中初始化仓库
git init
从服务器中克隆一个现有的git仓库
git clone [url]
提交更新
git commit -m "代码提交信息"
推送到远程仓库:
git remote add origin <server>
将改动提交到远程仓库(可以将master换成你想要推送的任何分支)
git push origin master
撤销操作
git commit --amend
Git分支

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master是默认分支。在其他分支上进行开发。完成后再将他们合并到主分支上。

创建一个名字叫做test的分支
git branch test
切换当前分支到test(当你切换分支的时候,Git会重置你的工作目录,使其看起来像回到了你在分支上最后一次提交的样子。Git会自动添加、修改、删除文件以确保此时你的工作目录和这个分支最后一次提交时的样子一摸一样)
git checkout test
你可以直接这样创建分支并切换过去
git checkout -b feature_x
切换到主分支
git checkout master
合并分支
git merge test
把新建的分支删除掉
git push origin

数据库环境搭建

employee        员工表;        category        分类表;

dish        菜品表;        dish_flavor        菜品口味表;

setmeal        套餐表;        setmeal_dish        套餐菜品关系表

user        用户表;        adress_book        地址表;

shopping_cart        购物车表;        orders        订单表;

order_detail        订单明细表;

Nginx反向代理和负载均衡

前端发送的请求,是如何请求到后端服务的?

        nginx反向代理就是将前端发送的请求由nginx动态转发到后端服务器。

        nginx反向代理好处

  1. 提高访问速度
  2. 进行负载均衡
  3. 保证后端服务安全

Day1

完善登录功能

password = DigestUtils.md5DigestAsHex(password.getBytes());

Swagger介绍和使用

后端生成接口文档并且进行测试

介绍

生成接口文档以及在线调试。

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

Yapi是设计阶段的工具,管理和维护接口;Swagger在开发阶段使用的框架,帮助后端开发人员做后端的接口测试。

使用方式
  • 导入knife4j的maven坐标
  • 在配置类中加入knife4j相关配置
  • 设置静态资源映射,否则接口文档页面无法显示
  • 访问接口文档界面localhost:8080/doc.html
常用注解

@Api 用在类上,例如controller表示对类的说明

@ApiModel 用在类上,例如entity,DTO,VO

@ApiModelProperty 用在属性上,描述属性信息

@ApiOPeration 用在方法上,例如controller的方法,说明方法的用途、作用

Day2

员工管理

新增员工
  1. 如果传入的数据是json需要添加 @RequestBody 注解
  2. 对象属性拷贝由A拷贝到B,前提是A,B的属性名一致
    BeanUtils.copyProperties(employeeDTO,employee);

代码完善:

录入的用户名已存在,抛出异常后没有处理;

        处理过程首先捕捉出现的异常,然后分析相关错误;

新增员工时,创建人id和修改人id设置为了固定值;

  1. 熟悉关于基于JWT令牌认证的过程。
  2. 截取JWT令牌,并且分析令牌里面出现的ID
  3. 那么如何将ID传给服务?

ThreadLocal并不是一个Thread,而是Thread的局部变量。

ThreadLocal为每一个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问到。

ThreadLocal常用方法

  • public void set(T value) 设置当前线程的线程局部变量的值
  • public T get() 返回当前线程所对应的线程局部变量
  • public void remove()移除当前线程的线程局部变量

员工分页查询
  • Pagehelper插件,分页查询是基于SQL的limit关键字计算,其返回类型也要为Page
    PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
    
  • 分页查询XML书写:
启用禁用员工账号
  • @PathVariable是Spring框架中的一个注解,用于将URL中的路径变量绑定到方法参数上。
编辑员工
  • 注意书写SQL的语法错误
导入分类模块功能代码

菜品管理

公共字段自动填充
实现思路
insert    create_time 创建时间    datetimecreate_user 创建人id    bigint
insert/updateupdate_time 创建时间    datetimeupdate_user 修改时间    bigint
  1. 自定义注解AutoFill,用于标识需要进行公共字段自动填充的方法。
  2. 自定义切面AutoFillAspect,统一拦截加入了AutoFill注解的方法,通过反射为公共字段赋值。
  3. 在Mapper加入AutoFill注解。
//获取到当前被拦截的方法上的数据库操作类型MethodSignature signature = (MethodSignature) joinPoint.getSignature();//方法签名对象AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class);//获得方法上的注解OperationType operationType = autoFill.value();//获得数据库操作类型//获取到当前被拦截的方法的参数--实体对象Object[] args = joinPoint.getArgs();if(args == null || args.length == 0){return;}Object entity = args[0];//准备赋值的数据LocalDateTime now = LocalDateTime.now();Long currentId = BaseContext.getCurrentId();//根据当前不同的操作类型,为对应的属性通过反射来赋值if(operationType == OperationType.INSERT){//为四个字段赋值try{Method setCreateTime = entity.getClass().getDeclaredMethod("setCreateTime", LocalDateTime.class);Method setCreateUser = entity.getClass().getDeclaredMethod("setCreateUser",Long.class);Method setUpdateTime = entity.getClass().getDeclaredMethod("setUpdateTime", LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod("setUpdateUser",Long.class);//通过反射赋值setCreateTime.invoke(entity,now);setCreateUser.invoke(entity,currentId);setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);}catch (Exception e){e.printStackTrace();}}else if (operationType == OperationType.UPDATE){try{Method setUpdateTime = entity.getClass().getDeclaredMethod("setUpdateTime", LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod("setUpdateUser",Long.class);//通过反射赋值setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);}catch (Exception e){e.printStackTrace();}}

通过在Mapper里面加入注解

@AutoFill(value = OperationType.INSERT)
/@AutoFill(value = OperationType.UPDATE)

使用阿里OSS

  1. 在阿里云官网创建一个bucket
  2. 完善配置项
  3. 创建config文件

Day5

Redis基础知识

Redis是基于内存的key-value结构数据库。

  • 基于内存存储,读写性能高
  • 适合存储热点数据,热点商品、资讯、新闻
  •  企业应用广泛

如何打开Redis在程序所在的文件目录打开cmd

redis-server.exe redis.windows.conf
结束进程
ctrl + c

如何连接redis

redis-cli.exe

Redis中的数据类型

Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型。

  1. 字符串string
  2. 哈希hash
  3. 列表list
  4. 集合set
  5. 有序集合sorted set / zset

字符串String

SET key value 设置指定key的值;

GET key 获取指定key的值;

SETEX key  seconds value 设置指定key的值,并将key的过期时间设为seconds(获取验证码)

SETNX key value 只有在key不存在时设置key的值

哈希操作命令

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

HSET key field value        将哈希表key中的字段field的值设为value

HGET key field        获取存储在哈希表中指定字段的值

HDEL key field        删除存储在哈希表中的指定字段

HKEYS key        获取哈希表中所有字段

HVALS key        获取哈希表中所有值

其中,key、field1、value均为字符串。

列表操作命令

Redis列表是最简单的字符串列表,按照插入顺序排序,常用命令:

  • LPUSH key value1 [value2]        将一个或多个值插入到列表头部
  • LRANGE key start stop        获取列表最后一个元素 lrange key 0 -1输出全部元素
  • LPOP key       移除并获取列表最后一个元素
  • LLEN key       获取列表长度
  • R类似
 集合操作命令

Redis set 是string 类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常见命令:

  • SADD key member1 [member2]        向集合中添加一个或多个成员
  • SMEMBERS key                 返回集合中的所有成员
  • SCARD key                    获取集合的成员数
  • SINTER key1 [key2]         返回给定所有集合的交集
  • SUNION key1 [key2]          返回所有给定集合的并集
  • SREM key member1 [member2]          删除集合中一个或多个成员

有序集合操作命令

Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。常用命令:

  • ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员

  • ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间的成员

  • ZINCRBY key increment member 有序集合中对指定成员的分数加上增量increment

  • ZREM key member [member ...] 移除有序集合中的一个或多个成员 

Redis通用命令

不分数据类型,都可以使用的命令

  • KEYS pattern 查找所有符合给定模型的key
  • EXISTS key 检查给定key是否存在
  • TYPE key 返回key所存储的值的类型
  • DEL key 该命令用于在key存在时删除key

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java毕业设计 基于SSM SpringBoot vue购物比价网站

Java毕业设计 基于SSM SpringBoot vue购物比价网站 SSM vue 购物比价网站 功能介绍 首页 图片轮播 商品 商品分类 商品详情 评论 收藏 商品攻略 商品信息 公告栏 在线反馈 登录 注册 个人中心 我的收藏 后台管理 登录 注册商品户 个人中心 修改密码 个人信息 商品户管理 用户…

Excel2LaTeX插件的使用、LaTeX表格

目录 一、下载Excel2Latex 二、使用Excel2Latex 1、将Excel2LaTeX文件添加到加载项 2、导出LaTex的表格数据 3、注意事项 1&#xff09;生成的latex表格断断续续问题 2&#xff09;改变线形的粗细 3&#xff09;表格太大&#xff0c;需要缩小到适应大小 4&#xff09;…

ETL是什么

一、ETL概念 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform&#xff09;、加载&#xff08;load&#xff09;至目的端的过程。ETL一词较常用在数据仓库&#xff…

qsort函数(任意类型排序)

void qsort(void base, size_t num, size_t size, int (*compar)(const void*p1, const void*p2))排序函数&#xff0c;可以排序各种类型的函数 四个参数&#xff1a; void qsort( void base&#xff0c;&#xff1a;base指向数组的第一个元素 size_t num,&#xff1a;base…

Gitlab: 私有化部署

目录 1. 说明 2. 资源要求 3. 安装 4. 配置实践 4.1 服务器 4.2 人员与项目 4.2 部署准备 4.2.1 访问变量及用户账号设置 4.2.2 Runner设置 4.2.3 要点 5. 应用项目 CI/CD 6. 参考 1. 说明 gitlab是一个强大且免费的代码管理/部署工具&#xff0c;能统一集成代码仓…

ubuntu基础操作(1)-个人笔记

搜狗输入法Linux官网-首页搜狗输入法for linux—支持全拼、简拼、模糊音、云输入、皮肤、中英混输https://pinyin.sogou.com/linux 1.关闭sudo密码&#xff1a; 终端&#xff08;ctrl alt t&#xff09;输入 sudo visudo 打开visudo 找到 %sudo ALL(ALL:ALL) ALL 这一行…

视频和音频使用ffmpeg进行合并和分离(MP4)

1.下载ffmpeg 官网地址&#xff1a;https://ffmpeg.org/download.html 2.配置环境变量 此电脑右键点击 属性 - 高级系统配置 -高级 -环境变量 - 系统变量 path 新增 文件的bin路径 3.验证配置成功 ffmpeg -version 返回版本信息说明配置成功4.执行合并 ffmpeg -i 武家坡20…

DTD、XML阐述、XML的两种文档类型约束和DTD的使用

目录 ​编辑 一、DTD 什么是DTD&#xff1f; 为什么要使用 DTD&#xff1f; 内部 DTD 声明 具有内部 DTD 的 XML 文档 外部 DTD 声明 引用外部 DTD 的 XML 文档 二、XML 什么是XML&#xff1f; XML 不执行任何操作 XML 和 HTML 之间的区别 XML 不使用预定义的标记…

LeetCode 热题100 刷题笔记

一&#xff1a;哈希表 一般哈希表都是用来快速判断一个元素是否出现集合里。 直白来讲其实数组就是一张哈希表&#xff0c;哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素。 1.两数之和 题目链接&#xff1a;. - 力扣&#xff08;LeetCode…

MATLAB练习题:判断整数是否为回文数

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 给定一个1到1亿之间的整数&#xff0c;请判断这个整数是否为回…

【毛毛讲书】【时间贫困】时间都去哪了?

重磅推荐专栏&#xff1a; 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域&#xff0c;包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用&#xff0c;以及与之相关的人工智能生成内容&#xff…

奇点云:SAFe框架下,我们对平台软件工程生产线做了4项改造

导读&#xff1a; 客户规模扩大&#xff0c;如何保证大数据软件产品和服务质量始终如一&#xff1f;几乎所有成长中的软件厂商&#xff0c;尤其是需要通过私有化部署交付的厂商&#xff0c;都会面临这个问题。正如《人月神话》中多次表明的&#xff0c;单纯地增加人手、扩大团队…

网络传输基本流程(封装,解包)+图解(同层直接通信的证明),报头分离问题,协议定位问题,协议多路复用

目录 网络传输基本流程 引入 封装 过程梳理 图解 报文 解包 过程梳理 图解 -- 同层直接通信的证明 总结 解包时的报头分离问题 举例 -- 倒水 介绍 自底向上传输时的协议定位问题 介绍 解决方法 协议多路复用 介绍 优势 网络传输基本流程 引入 首先,我们明确…

数据库分库分表中间件选择

目前分库分表的中间件有三种设计思路&#xff0c;分别是&#xff1a; 采用分散式架构&#xff0c;适用于用Java开发的高性能轻量级OLTP应用程序&#xff0c;以Sharding-JDBC为代表。采用中间层Proxy架构&#xff0c;提供了静态输入和所有语言支持&#xff0c;适用于OLAP应用程…

适用Java SpringBoot项目的分布式锁

在分布式系统中&#xff0c;常用到分布式锁&#xff0c;它有多中实现方式&#xff0c;如&#xff1a;基于redis&#xff0c;database&#xff0c;zookeeper等。Spring integration组件有这三种服务的分布式锁实现&#xff0c;今天来看看用的比较多的redis和database实现方式。 …

MYSQL06高级_为什么使用索引、优缺点、索引的设计、方案、聚簇索引、联合索引、注意事项

文章目录 ①. 为什么使用索引②. 索引及其优缺点③. InnoDb - 索引的设计④. InnoDb中的索引方案⑤. 索引 - 聚簇索引⑥. 索引 - 二级索引⑦. B树索引的注意事项⑧. MyISAM中索引方案⑨. 索引总结 - 重点 ①. 为什么使用索引 ①. 索引是存储引擎用于快速找到数据记录的一种数据…

《Spring Security 简易速速上手小册》第3章 用户认证机制(2024 最新版)

文章目录 3.1 认证流程3.1.1 基础知识详解认证流程的核心概念认证流程的步骤 3.1.2 主要案例&#xff1a;内存用户认证案例 Demo&#xff1a;快速启动你的 Spring Boot 守护程序 3.1.3 拓展案例 1&#xff1a;数据库用户认证案例 Demo&#xff1a;让数据库守护你的秘密 3.1.4 拓…

【力扣hot100】刷题笔记Day18

前言 晚上巩固一下今天的回溯题&#xff0c;基础不牢地动山摇&#xff0c;po一张代码随想录总结的 组合补充 77. 组合 - 力扣&#xff08;LeetCode&#xff09; class Solution:def combine(self, n: int, k: int) -> List[List[int]]:path []res []def backtrack(star…

ARM简介

ARM&#xff1a;ARM是Advanced RISC Machine的缩写&#xff0c;意为高级精简指令集计算机。 英国ARM公司&#xff0c;2016年被软银创始人孙正义斥资320亿美元收购了。现在是软银旗下的芯片设计公司&#xff0c;总部位于英国剑桥&#xff0c;专注于设计芯片&#xff0c;卖芯片生…

Git安装的一些步骤解说(小白好奇心严重版本)

Use bundled OpenSSH 安装 Git 时&#xff0c;您面临的选择是使用 Git 自带的 SSH 客户端&#xff08;bundled OpenSSH&#xff09;还是使用系统上已安装的外部 SSH 客户端&#xff08;external OpenSSH&#xff09;。以下是两个选项的一些考虑因素&#xff1a; 使用 Git 自带的…