蒼穹外賣知識點總結(一)

簡介

技術選型

展示項目中使用到的技術框架和中間件。

用戶層: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.pswp.cn/news/710750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710750.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710750.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對齊了之后才舒服,matplotlib文字和字體設置

文章目錄 text方法字體局部字體 matplotlib教程&#xff1a; 初步&#x1f4c8; 子圖繪制&#x1f4c8; 坐標投影&#x1f4c8; 刻度設置&#x1f4c8; 共享坐標軸&#x1f4c8; 內容填充 text方法 【plt】提供了文字顯示函數text&#xff0c;包含三個必不可少的參數&am…

全量知識系統問題及SmartChat給出的答復 之7 三套工具之2

Q17. 三套工具的功能 問&#xff1a;以上代碼中并沒有體現出三套工具的功能性。 前端&#xff1a; 自動化或規則化 應用評測工具-“MOCK” &#xff08;會有三種不同的自動化程度&#xff1a;全自動化&#xff0c;半自動化和全人工&#xff09;&#xff0c;中間 &#xff1a; …

【QT+QGIS跨平臺編譯】之五十八:【QGIS_CORE跨平臺編譯】—【qgsexpression_texts.cpp生成】

文章目錄 一、Python二、生成來源三、構建過程3.1 構建qgsexpression_texts.cpp.temp3.2 構建qgsexpression_texts.cpp一、Python python.exe 是 Python 解釋器的可執行文件,用于在命令行中運行 Python 腳本。它是 Python 編程語言的解釋器程序,負責解析和執行 Python 代碼。…

第十四屆校模擬賽第一期(一)

“須知少時凌云志&#xff0c;自許人間第一流” 鄙人11月八號有幸參加學校校選拔賽&#xff0c;題型為5道填空題&#xff0c;5道編程題&#xff0c;總時間為4小時。奈何能力有限&#xff0c;只完成了5道填空和3道編程大題&#xff0c;現進行自省自糾&#xff0c;分享學習&#…

改進YOLO系列 | YOLOv5/v7 引入通用高效層聚合網絡 GELAN | YOLOv9 新模塊

今天的深度學習方法專注于如何設計最合適的目標函數,以使模型的預測結果最接近真實情況。同時,必須設計一個合適的架構,以便為預測提供足夠的信息。現有方法忽視了一個事實,即當輸入數據經過逐層特征提取和空間轉換時,會丟失大量信息。本文將深入探討數據通過深度網絡傳輸…

[AutoSar]BSW_Com06 CAN報文應用層到Can總線的函數調用

目錄 關鍵詞平臺說明一、背景二、PDU轉換三、函數調用 關鍵詞 嵌入式、C語言、autosar、OS、BSW 平臺說明 項目ValueOSautosar OSautosar廠商vector &#xff0c;芯片廠商TI 英飛凌編程語言C&#xff0c;C編譯器HighTec (GCC)autosar版本4.3.X >>>>>回到總目…

流水賬-20240229

目錄 git本地回滾到到120bc409ee3b8f63a23d0060e55118bcce557acf提交記錄本地提交到已有代碼分支 IDEA批量導入快捷鍵無效更換背景主題快捷鍵快捷鍵可以設置eclipse模式&#xff0c;但是有些不生效&#xff0c;可能是沖突了Ctrl單擊&#xff0c;Eclipse里面是可以跳轉到代碼內部…

AI:139-基于深度學習的語音指令識別與執行

??點擊這里跳轉到本專欄,可查閱專欄頂置最新的指南寶典~ ?????? 你的技術旅程將在這里啟航! 從基礎到實踐,深入學習。無論你是初學者還是經驗豐富的老手,對于本專欄案例和項目實踐都有參考學習意義。 ??? 每一個案例都附帶關鍵代碼,詳細講解供大家學習,希望…

js實現文件下載,并傳給后端

在JavaScript中&#xff0c;可以通過創建一個鏈接并設置其href屬性為文件的URL&#xff0c;然后使用download屬性指定文件的名稱來實現文件下載。以下是一個簡單的示例代碼&#xff1a; function downloadFile(url, filename) {const link document.createElement(a);link.hr…

Vue3自定義文件列表頁面(含上傳、搜索、復制鏈接)

文章目錄 一、代碼展示二、代碼解讀三、結果展示 一、代碼展示 <template><div class"container"><h1>文件列表</h1><div class"header-actions"><a-input placeholder"輸入關鍵詞搜索" v-model:value"…

字符串函數strchr()詳解

一、strchr()函數的作用 字符串函數 strchr() 是 C 語言的一個標準庫函數&#xff0c;它的作用是在一個字符串中查找給定字符的第一個匹配之處&#xff0c;并返回指向該字符的指針。如果沒有找到該字符&#xff0c;則返回 NULL。1 二、strchr()函數的原型和參數 strchr()函數…

【筆記】:更方便的將一個List中的數據傳入另一個List中,避免多重循環

這里是 simpleInfoList 集合&#xff0c;記為集合A&#xff08;傳值對象&#xff09; List<CourseSimpleInfoDTO> simpleInfoList courseClient.getSimpleInfoList(courseIds);if(simpleInfoListnull){throw new BizIllegalException("當前課程不存在!");}這…

【Spring連載】使用Spring Data----對象映射基礎Object Mapping Fundamentals

【Spring連載】使用Spring Data----對象映射基礎Object Mapping Fundamentals 一、對象創建1.1 對象創建內部機制Object creation internals 二、屬性填充Property population2.1 屬性填充內部機制Property population internals 三、一般建議3.1 覆蓋屬性 四、Kotlin支持4.1 K…

libigl 網格中點細分(網格上采樣)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 在網格細分中,我們可以將每個三角形分成若干個更小的三角形。其中最簡單的情況就是通過計算每個三角形每條邊的中點,這樣就可以將三角形分成四個更小的三角形。不過該方法并不會使得網格的表面和面積發生變化,而…

Python:練習:編寫一個程序,寫入一個美金數量,然后顯示出如何用最少的20美元、10美元、5美元和1美元來付款

案例&#xff1a; python編寫一個程序&#xff0c;寫入一個美金數量&#xff0c;然后顯示出如何用最少的20美元、10美元、5美元和1美元來付款&#xff1a; Enter a dollar amout:93 $20 bills: 4 $10 bills: 1 $5 bills:0 $1 bills:3 思考&#xff1a; 寫入一個美金數量&…

數據分析Pandas專欄---第十一章<Pandas數據聚合與分組(1)>

前言: 數據聚合和分組操作是數據處理過程中不可或缺的一部分。它們允許我們根據特定的條件對數據進行分組&#xff0c;并對每個組進行聚合計算。這對于統計分析、匯總數據以及生成報告和可視化非常有用。無論是市場營銷數據分析、銷售業績評估還是金融數據建模&#xff0c;數據…

【數據分享】2000~2023年MOD15A2H 061 葉面積指數LAI數據集

各位同學們好&#xff0c;今天和大伙兒交流的是2000~2013年MOD15A2H 061 LAI數據集。如果大家有下載處理數據等方面的問題&#xff0c;您可以私信或評論。 Myneni, R., Y. Knyazikhin, T. Park. MODIS/Terra Leaf Area Index/FPAR 8-Day L4 Global 500m SIN Grid V061. 2021, d…

在原有項目進行業務邏輯開發:同一用戶短時間不得提交多次申請,以及更新主表時數據刷新掉了角色權限以及密碼重置的問題,詳細思路及代碼

開發背景&#xff1a; 用戶提交表單后&#xff0c;插入到對應數據庫表的字段中去&#xff0c;因需要保存是哪一個用戶提交的&#xff0c;所以需要拿到主表的user_id&#xff0c;更新功能為記錄提交時間&#xff0c;短時間不得再次提交 在對一個已有角色權限分配&#xff0c;登錄…

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之對象引用

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之對象引用 一、使用DBRefs 一、使用DBRefs

layui中,父頁面與子頁面,函數方法的相互調用、傳參

<%--父頁面--%> <script type"text/javascript">var KaoHaoType 0; // 考號類型 自定義參數1// 選取考號類型function SelectKaoHaoType(callBack) {KaoHaoType 0; // 默認選擇填涂考號layer.open({type: 2, title: 請選擇 考號區類型, ar…