瑞吉外賣學習筆記

@TableField

作用:

  • 當數據庫中表的列名與實體類中的屬性名不一致,使用@TableField 使其對應
@TableField("db_column_name")
private String entityFieldName;
  • exist 屬性 : 指定該字段是否參與增刪改查操作。

    @TableField(exist = false)
    private String tempField;  // 該字段不會參與數據庫操作
    
  • 實現自動填充,標注在需要自動填充的字段上:

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;  // 插入時自動填充
    
  • 指定更新策略:

    @TableField(updateStrategy = FieldStrategy.NOT_NULL)
    private String name;  // 只有字段不為空時才更新
    
異常處理器
package warren.reggie.common;/** author: Warren*/import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;import java.sql.SQLIntegrityConstraintViolationException;@ControllerAdvice(annotations = {RestControllerAdvice.class, Controller.class}) // 處理加了這些注解的類(@RestController 或 @Controller)
@ResponseBody // 返回的對象會自動序列化為JSON,直接作為HTTP響應體返回
public class ExceptionHandler {/*** 處理SQLIntegrityConstraintViolationException異常。* @param ex 捕獲的異常對象* @return 返回錯誤信息的響應對象(R類)*/@org.springframework.web.bind.annotation.ExceptionHandler(SQLIntegrityConstraintViolationException.class)public R<String> ExceptionHandler(SQLIntegrityConstraintViolationException ex) {System.out.println("異常信息:" + ex.getMessage());if (ex.getMessage().contains("Duplicate entry")) {//將異常信息按空格拆分并取出相關字段String[] s = ex.getMessage().split(" ");// 錯誤信息提取:獲取重復條目的字段值,通常是數據庫的唯一鍵(如用戶名、手機號等)String msg = s[2] + "已存在"; // 提示用戶該數據已存在return R.error(msg);}// 如果不是重復數據的錯誤,則返回通用的錯誤信息return R.error("出錯了");}
}

@ExceptionHandler : 捕獲并處理指定類型的異常。

@ControllerAdvice : 集中處理所有控制器類中拋出的異常。應用于所有帶有 @Controller@RestController 注解的類.

強制刷新瀏覽器緩存 :(Ctrl + Shift + R)。

Spring Cache
  • 一個框架,使用注解實現緩存功能
  • CacheManager 是spring提供的各種緩存技術的接口.

![[Pasted image 20250219101359.png]]

如何使用緩存技術 : 導入對應技術的依賴包,并在啟動類上使用@EnableCaching注解

常用注解:

注解作用
@Cacheable查詢緩存,如果緩存存在數據,則直接返回,否則查詢數據庫,并存入緩存
@CachePut更新緩存,執行方法并更新緩存數據
@CacheEvict刪除緩存,當數據更新/刪除時,清除對應緩存
@Caching組合多個緩存注解,用于復雜緩存策略
@CacheConfig類級別的緩存配置,簡化 @Cacheable@CachePut@CacheEvictvalue 指定
@Cacheable(查詢緩存):
@Service
public class DishService {@Cacheable(value = "dish_list", key = "#categoryId + ':' + #status")public List<DishDto> getDishList(Long categoryId, int status) {System.out.println("查詢數據庫...");return dishMapper.findDishesByCategory(categoryId, status);}
}

解釋:

  • value = "dish_list" → 緩存的名稱(類似 Redis key)。
  • key = "#categoryId + ':' + #status" → 緩存的鍵

注意:

  • 默認不緩存 null 值,如果數據庫查詢結果是 null,下次仍然會查詢數據庫。
  • 默認緩存不會過期,需要手動配置 TTL 機制(如果底層存儲是 Redis,可以設置過期時間)。
@CachePut(更新緩存):

@CachePut 不會查詢緩存,它的作用是更新緩存.

@CachePut(value = "dish_list", key = "#dto.categoryId + ':1'")
public DishDto updateDish(DishDto dto) {dishMapper.updateDish(dto);return dto;  // 返回值會存入緩存
}

區別 @Cacheable@CachePut

  • @Cacheable 先查詢緩存,如果緩存存在,直接返回,不執行方法。
  • @CachePut 一定會執行方法,然后更新緩存數據。
@CacheEvict(刪除緩存):
@CacheEvict(value = "dish_list", key = "#dto.categoryId + ':1'")
public void deleteDish(DishDto dto) {dishMapper.deleteDish(dto.getId());
}

清除所有緩存:

@CacheEvict(value = "dish_list", allEntries = true)
public void clearCache() {System.out.println("清空緩存");
}
  • allEntries = true → 清空 dish_list 里的所有緩存
Spring Cache 整合 Redis
  • 引入 Redis 依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 配置 Redis:
# Redis 服務器地址
spring.redis.host=localhost
spring.redis.port=6379
spring.cache.type=redis
  • 使用 Spring Cache:
@Cacheable(value = "dish_list", key = "#categoryId + ':' + #status")
public List<DishDto> getDishList(Long categoryId, int status) {return dishMapper.findDishesByCategory(categoryId, status);
}
  • 設置緩存過期時間(TTL):

    如果使用 Redis,在 application.yml 設置 TTL:

spring:cache:redis:time-to-live: 3600000  # 設置緩存 1 小時過期(單位:毫秒)
MySQL主從復制:
  • 主庫(Master)處理 INSERTUPDATEDELETE(寫操作)。
  • 從庫(Slave)處理 SELECT(讀操作),分擔查詢壓力,提高并發能力。

主從復制的過程:

主庫生成 binlog(Binary Log): 主庫的所有數據變更操作都會記錄到 binlog(二進制日志)。

從庫復制 binlog(Relay Log 復制): 從庫會通過 I/O 線程,從主庫拉取 binlog 并存儲到本地的 Relay Log(中繼日志)**。

從庫回放 Relay Log,更新數據 : 從庫的 SQL 線程讀取 Relay Log,并執行 SQL 語句,使從庫的數據與主庫保持一致。

Nginx
目錄結構:
  • conf/nginx.conf : 配置文件
  • html : 存放靜態文件(html,css,js)
  • logs : 存放日志文件
  • sbin/nginx : 二進制文件,用于啟動,停止nginx服務
在linux中配置nginx環境變量后,Nginx 可用的命令:
命令作用
nginx -v查看 Nginx 版本
nginx -t檢查 Nginx 配置是否正確
nginx啟動 Nginx
nginx -s stop停止 Nginx
nginx -s reload重新加載 Nginx 配置
nginx -s quit優雅關閉 Nginx(處理完當前請求后退出)
Nginx 配置文件結構介紹

整體分為三部分:

  • 全局塊:和 Nginx 運行相關的全局配置
  • events 塊:和網絡連接相關的配置
  • http 塊:代理、緩存、日志記錄、虛擬主機配置
    • http 全局塊
    • Server 塊
      • Server 全局塊
      • location 塊

注意:http 塊中可以配置多個 Server,每個 Server 塊中可以配置多個 location 塊。

配置示例:

worker_processes 1;events {worker_connections 1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile      on;keepalive_timeout 65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}}
}
Nginx部署靜態資源:

Nginx 可以作為靜態 Web 服務器來部署靜態資源。

相較于 Tomcat,Nginx 處理靜態資源的能力更強,在生產環境下,一般都會將靜態資源部署到 Nginx。
部署方式 : 只需要將文件復制到 Nginx 安裝目錄下的 html 目錄中即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90773.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90773.shtml

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

相關文章

RoPE:相對位置編碼的旋轉革命——原理、演進與大模型應用全景

“以復數旋轉解鎖位置關系的本質表達&#xff0c;讓Transformer突破長度藩籬” 旋轉位置編碼&#xff08;Rotary Position Embedding, RoPE&#xff09; 是由 Jianlin Su 等研究者 于2021年提出的突破性位置編碼方法&#xff0c;通過復數空間中的旋轉操作將相對位置信息融入Tra…

震網(Stuxnet):打開潘多拉魔盒的數字幽靈

在科技飛速發展的今天&#xff0c;代碼和數據似乎只存在于無形的數字世界。但如果我告訴大家&#xff0c;一段代碼曾悄無聲息地潛入一座受到嚴密物理隔離的核工廠&#xff0c;并成功摧毀了其中的物理設備&#xff0c;大家是否會感到一絲寒意&#xff1f;這不是科幻電影的情節&a…

一文讀懂:到底什么是 “具身智能” ?

今天咱們來好好聊聊一個最近很火的一個技術話題——具身智能&#xff01; 這個詞聽起來是不是有點難懂&#xff1f;其實我們可以簡單理解為&#xff1a;具身智能是具有身體的人工智能體。這樣是不是會容易理解一些&#xff1f; 具身智能&#xff08;Embodied Intelligence&…

企業級區塊鏈平臺Hyperchain核心原理剖析

Hyperchain作為國產自主可控的企業級聯盟區塊鏈平臺&#xff0c;其核心原理圍繞高性能共識、隱私保護、智能合約引擎及可擴展架構展開&#xff0c;通過多模塊協同實現企業級區塊鏈網絡的高效部署與安全運行。 以下從核心架構、關鍵技術、性能優化、安全機制、應用場景五個維度展…

論文閱讀-RaftStereo

文章目錄1 概述2 模塊說明2.1 特征抽取器2.2 相關金字塔2.3 多級更新算子2.4 Slow-Fast GRU2.5 監督3 效果1 概述 在雙目立體匹配中&#xff0c;基于迭代的模型是一種比較主流的方法&#xff0c;而其鼻祖就是本文要講的RaftStereo。 先來說下什么是雙目立體匹配。給定極線矯正…

內存優化:從堆分配到零拷貝的終極重構

引言 在現代高性能軟件開發中&#xff0c;內存管理往往是性能優化的關鍵戰場。頻繁的堆內存分配(new/delete)不僅會導致性能下降&#xff0c;還會引發內存碎片化問題&#xff0c;嚴重影響系統穩定性。本文將深入剖析高頻調用模塊中堆分配泛濫導致的性能塌方問題&#xff0c;并…

【GoLang#2】:基礎入門(工具鏈 | 基礎語法 | 內置函數)

前言&#xff1a;Go 的一些必備知識 1. Go 語言命名 Go的函數、變量、常量、自定義類型、包(package)的命名方式遵循以下規則&#xff1a; 首字符可以是任意的Unicode字符或者下劃線剩余字符可以是Unicode字符、下劃線、數字字符長度不限 Go 語言代碼風格及開發事項代碼每一行結…

Bert項目--新聞標題文本分類

目錄 技術細節 1、下載模型 2、config文件 3、BERT 文本分類數據預處理流程 4、對輸入文本進行分類 5、計算模型的分類性能指標 6、模型訓練 7、基于BERT的文本分類預測接口 問題總結 技術細節 1、下載模型 文件名稱--a0_download_model.py 使用 ModelScope 庫從模型倉…

sendfile系統調用及示例

好的&#xff0c;我們繼續學習 Linux 系統編程中的重要函數。這次我們介紹 sendfile 函數&#xff0c;它是一個高效的系統調用&#xff0c;用于在兩個文件描述符之間直接傳輸數據&#xff0c;通常用于將文件內容發送到網絡套接字&#xff0c;而無需將數據從內核空間復制到用戶空…

數據結構習題--刪除排序數組中的重復項

數據結構習題–刪除排序數組中的重復項 給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你 原地 刪除重復出現的元素&#xff0c;使每個元素 只出現一次 &#xff0c;返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數。 方法&…

Docker的容器設置隨Docker的啟動而啟動

原因也比較簡單&#xff0c;在docker run 的時候沒有設置–restartalways參數。 容器啟動時&#xff0c;需要增加參數 –restartalways no - 容器退出時&#xff0c;不重啟容器&#xff1b; on-failure - 只有在非0狀態退出時才從新啟動容器&#xff1b; always - 無論退出狀態…

JWT安全機制與最佳實踐詳解

JWT&#xff08;JSON Web Token&#xff09; 是一種開放標準&#xff08;RFC 7519&#xff09;&#xff0c;用于在各方之間安全地傳輸信息作為緊湊且自包含的 JSON 對象。它被廣泛用于身份驗證&#xff08;Authentication&#xff09;和授權&#xff08;Authorization&#xff…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘ipython’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘ipython’問題 摘要 在開發過程中&#xff0c;我們常常會遇到pip install報錯的問題&#xff0c;其中一個常見的報錯是 ModuleNotFoundError: No module named…

從三維Coulomb勢到二維對數勢的下降法推導

題目 問題 7. 應用 9.1.4 小節描述的下降法&#xff0c;但針對二維的拉普拉斯方程&#xff0c;并從三維的 Coulomb 勢出發 KaTeX parse error: Invalid delimiter: {"type":"ordgroup","mode":"math","loc":{"lexer&qu…

直播一體機技術方案解析:基于RK3588S的硬件架構特性?

硬件配置??主控平臺??? 搭載瑞芯微RK3588S旗艦處理器&#xff08;四核A762.4GHz 四核A55&#xff09;? 集成ARM Mali-G610 MP4 GPU 6TOPS算力NPU? 雙通道LPDDR5內存 UFS3.1存儲組合??專用加速單元??→ 板載視頻采集模塊&#xff1a;支持4K60fps HDMI環出采集→ 集…

【氮化鎵】GaN取代GaAs作為空間激光無線能量傳輸光伏轉換器材料

2025年7月1日,西班牙圣地亞哥-德孔波斯特拉大學的Javier F. Lozano等人在《Optics and Laser Technology》期刊發表了題為《Gallium nitride: a strong candidate to replace GaAs as base material for optical photovoltaic converters in space exploration》的文章,基于T…

直播美顏SDK動態貼紙模塊開發指南:從人臉關鍵點識別到3D貼合

很多美顏技術開發者好奇&#xff0c;如何在直播美顏SDK中實現一個高質量的動態貼紙模塊&#xff1f;這不是簡單地“貼圖貼臉”&#xff0c;而是一個融合人臉關鍵點識別、實時渲染、貼紙驅動邏輯、3D骨骼動畫與跨平臺性能優化的系統工程。今天&#xff0c;就讓我們從底層技術出發…

學習游戲制作記錄(劍投擲技能)7.26

1.實現瞄準狀態和接劍狀態準備好瞄準動畫&#xff0c;投擲動畫和接劍動畫&#xff0c;并設置參數AimSword和CatchSword投擲動畫在瞄準動畫后&#xff0c;瞄準結束后才能投擲創建PlayerAimSwordState腳本和PlayerCatchSwordState腳本并在Player中初始化&#xff1a;PlayerAimSwo…

【c++】問答系統代碼改進解析:新增日志系統提升可維護性——關于我用AI編寫了一個聊天機器人……(14)

在軟件開發中&#xff0c;代碼的迭代優化往往從提升可維護性、可追蹤性入手。本文將詳細解析新增的日志系統改進&#xff0c;以及這些改進如何提升系統的實用性和可調試性。一、代碼整體背景代碼實現了一個基于 TF-IDF 算法的問答系統&#xff0c;核心功能包括&#xff1a;加載…

visual studio2022編譯unreal engine5.4.4源碼

UE5系列文章目錄 文章目錄 UE5系列文章目錄 前言 一、ue5官網 二.編譯源碼中遇到的問題 前言 一、ue5官網 UE5官網 UE5源碼下載地址 這樣雖然下載比較快,但是不能進行代碼git管理,以后如何虛幻官方有大的版本變動需要重新下載源碼,所以我們還是最好需要visual studio2022…