Springboot學習筆記3.20

目錄

1.實戰篇第一課

我們將會在本次實戰中學習到哪些知識點?

?開發模式和環境搭建:

注冊接口

1.Lombok

2.開發流程

1.controller層,這個層會指明訪問路徑和要執行的邏輯:

2.我們把返回結果根據接口文檔包裝成一個類result,它有code代表成敗,message代表返回信息,data代表響應數據

3.service接口和service實現類,實現controller層調用的方法,并且對數據進行加密:

4.Mapper層,使用@select,@Insert等注釋在Mapper層實現對數據庫的操作:

5.至此三層寫完,實現了注冊的流程,我們可以使用postman測試api是否可用(測試用的JSON文件另外提供):

2.學習過程中的疑惑:

1.@Controller和@RestController有啥區別

@Controller

@RestController

總結

示例代碼

使用?@Controller

使用?@RestController

2.?什么是RESTful web 服務

RESTful Web 服務的特點:

RESTful Web 服務的操作:

示例:

3.@RequestMapping 或 @GetMapping、@PostMapping的區別

@RequestMapping

@GetMapping

@PostMapping

示例

使用?@RequestMapping

使用?@GetMapping?和?@PostMapping

注意事項

4.$和#在Spring中的區別

#?符號

$?符號

示例

使用?#?符號

使用?$?符號

總結


1.實戰篇第一課

我們將會在本次實戰中學習到哪些知識點?

?開發模式和環境搭建:

?步驟:

?1.在xml文件中引入啟動依賴,如web、mybatis、MySQL:

2.在yml文件中配置mybatis的參數:

3.創建項目結構和實體類:

4.配置啟動類,添加@SpringBootApplication和SpringApplication.run()方法:

注冊接口

1.Lombok

為了避免手動編寫大量的 getter 和 setter 方法以及構造方法,你可以使用 Lombok 庫。Lombok 是一個 Java 庫,可以通過注解自動生成 getter、setter、構造方法等。

例如,在類上添加 @Data 注解,Lombok 會自動為類中的所有字段生成 getter 和 setter 方法,以及一個全參構造方法和一個無參構造方法:

@Data
public class User {private Integer id;//主鍵IDprivate String username;//用戶名private String password;//密碼private String nickname;//昵稱private String email;//郵箱private String userPic;//用戶頭像地址private LocalDateTime createTime;//創建時間private LocalDateTime updateTime;//更新時間}

它在編譯后的class里面會包含getset方法以及equals,toString等方法:

lombok還有這兩個注釋,可以讓你不用手動去寫構造方法。

2.開發流程

?對于一個注冊模塊,思考他的三層架構長什么樣?

1.controller層,這個層會指明訪問路徑和要執行的邏輯:

2.我們把返回結果根據接口文檔包裝成一個類result,它有code代表成敗,message代表返回信息,data代表響應數據

3.service接口和service實現類,實現controller層調用的方法,并且對數據進行加密:

工具類md5,這是一個加密工具類,調用里面的getMd5String()方法可以返回一個加密好的密碼

4.Mapper層,使用@select,@Insert等注釋在Mapper層實現對數據庫的操作:

5.至此三層寫完,實現了注冊的流程,我們可以使用postman測試api是否可用(測試用的JSON文件另外提供):

測試成功!

2.學習過程中的疑惑:

1.@Controller和@RestController有啥區別

在 Spring MVC 框架中,@Controller@RestController 都是用來創建控制器的注解注解,但它們有一些關鍵的區別:

@Controller

  • @Controller 是一個通用的控制器注解注解,它主要用于處理傳統的 MVC 模型,其中控制器只負責處理請求,返回視圖(頁面)和模型(數據)。

  • 使用 @Controller 時,返回的數據通常通過視圖解析器(ViewResolver)解析為具體的頁面。

  • 它通常與 @RequestMapping@GetMapping@PostMapping 等注解一起使用來映射請求路徑。

  • @Controller 控制器通常返回一個 ModelAndView 對象,或者返回一個視圖名稱讓視圖解析器決定如何渲染視圖。

@RestController

  • @RestController@Controller@ResponseBody 注解的結合體,用于創建 RESTful web 服務。

  • 使用 @RestController 時,Spring MVC 會自動將返回的對象序列化為 JSON 格式(默認使用 Jackson 庫),并直接寫入 HTTP 響應體中,而不是返回一個視圖名稱。

  • @RestController 通常用于構建 API 接口,它使得編寫 RESTful 服務變得更加簡單。

  • 它也與 @RequestMapping@GetMapping@PostMapping 等注解一起使用來映射請求路徑。

總結

  • 如果你需要返回一個視圖(如 JSP 頁面),使用 @Controller

  • 如果你需要返回 JSON 或 XML 格式的數據,使用 @RestController

示例代碼

使用?@Controller

java復制

@Controller
public class MyController {@RequestMapping("/hello")public String sayHello(Model model) {model.addAttribute("message", "Hello, World!");return "hello"; // 返回視圖名稱}
}
使用?@RestController

java復制

@RestController
public class MyRestController {@GetMapping("/hello")public Map<String, Object> sayHello() {Map<String, Object> map = new HashMap<>();map.put("message", "Hello, World!");return map; // 直接返回 JSON 數據}
}

2.?什么是RESTful web 服務

RESTful Web 服務是一種基于表現層狀態轉移(Representational State Transfer,簡稱 REST)原則構建的網絡應用程序接口(API)。REST 是由 Roy Fielding 在 2000 年提出的,它是一種設計風格,用于設計網絡應用程序,以便它們可以通過標準的 HTTP 方法訪問和操作網絡資源。

RESTful Web 服務的特點:

  1. 無狀態(Stateless): 每個請求從客戶端到服務器必須包含所有必要的信息來理解和處理請求,服務器不會存儲任何會話信息。

  2. 統一接口(Uniform Interface): 通過統一和預定義的接口簡化和標準化架構之間的交互。RESTful API 通常使用標準的 HTTP 方法(如 GET、POST、PUT、DELETE)來操作資源。

  3. 可緩存(Cacheable): 響應可以被標記為可緩存或不可緩存。這可以減少網絡通信量,提高響應速度。

  4. 分層系統(Layered System): 客戶端不能通常不能直接知道它是否正在與中間層(如代理服務器、網關或應用服務器)通信,還是直接與最終服務器通信。

  5. 按需代碼(Code on Demand,可選): 服務器可以按需向客戶端發送代碼(如 JavaScript),以擴展客戶端的功能。

  6. 超文本傳輸協議(HTTP): RESTful Web 服務通常使用 HTTP 協議來傳輸數據,這使得它們可以在 Web 瀏覽器中直接訪問。

RESTful Web 服務的操作:

  • GET:請求從服務器檢索特定資源。

  • POST:在服務器上創建一個新的資源。

  • PUT:更新服務器上的現有資源或創建一個新資源。

  • DELETE:從服務器刪除特定資源。

示例:

假設有一個 RESTful Web 服務用于管理博客文章:

  • GET /articles:檢索所有文章的列表。

  • GET /articles/{id}:檢索特定 ID 的文章。

  • POST /articles:創建一篇新文章。

  • PUT /articles/{id}:更新特定 ID 的文章。

  • DELETE /articles/{id}:刪除特定 ID 的文章。

RESTful Web 服務因其簡單性、可擴展性和易于維護性而在現代 Web 開發中非常流行。它們使得不同應用程序和服務之間的交互變得更加容易,并且可以輕松地與各種客戶端(包括瀏覽器、移動應用和第三方服務)集成。

3.@RequestMapping 或 @GetMapping、@PostMapping的區別

在 Spring MVC 框架中,@RequestMapping@GetMapping@PostMapping 是用于映射 HTTP 請求到處理器方法上的注解(annotations)。這些注解幫助定義了 URL 路徑和 HTTP 方法之間的對應關系。

@RequestMapping

@RequestMapping 是一個通用的請求映射注解,它可以映射到任何 HTTP 方法。它是最靈活的映射注解,可以指定路徑、方法、參數等。@RequestMapping 可以用于類或方法上。

  • 用于方法上:映射特定的 HTTP 請求到一個處理方法。

  • 用于類上:為類中的所有方法提供一個共同的基礎請求路徑。

@GetMapping

@GetMapping@RequestMapping 的一個特化,專門用于映射 HTTP GET 請求。它簡化了只處理 GET 請求的方法的定義。

@PostMapping

@PostMapping 也是 @RequestMapping 的一個特化,專門用于映射 HTTP POST 請求。它用于處理需要通過 POST 方法提交數據的場景。

示例

使用?@RequestMapping

java復制

@Controller
public class MyController {@RequestMapping(value = "/users", method = RequestMethod.GET)public String listUsers(Model model) {// 獲取用戶列表并添加到模型中model.addAttribute("users", userService.findAll());return "userList"; // 返回視圖名稱}@RequestMapping(value = "/users", method = RequestMethod.POST)public String addUser(@ModelAttribute("user") User user) {// 保存新用戶userService.save(user);return "redirect:/users"; // 重定向到用戶列表}
}
使用?@GetMapping?和?@PostMapping

java復制

@RestController
public class MyRestController {@GetMapping("/users")public List<User> listUsers() {// 獲取用戶列表并返回return userService.findAll();}@PostMapping("/users")public User addUser(@RequestBody User user) {// 保存新用戶并返回return userService.save(user);}
}

注意事項

  • 返回類型@Controller 通常返回視圖名稱,而 @RestController 返回數據(如 JSON)。

  • 請求體@RequestBody 注解用于將 HTTP 請求體綁定到方法參數上,通常與 @PostMapping 一起使用。

  • 路徑變量:可以使用 {variableName} 語法在路徑中定義變量,例如 @RequestMapping("/users/{userId}")

這些注解使得在 Spring MVC 中處理不同類型的 HTTP 請求變得更加簡單和直觀。通過合理使用這些注解,可以清晰地定義應用程序的 API 接口。

4.$和#在Spring中的區別

在 Spring 框架中,$# 這兩個符號在不同的上下文中有不同的用途,尤其是在 Spring Expression Language(SpEL)和 Bean 屬性注入中。

#?符號

在 Spring 中,# 符號通常與 SpEL(Spring Expression Language)一起使用。SpEL 是一種功能強大的表達式語言,它支持在運行時查詢和操作對象圖。

  • 屬性訪問:使用 # 可以訪問對象的屬性。例如,#user.name 可以獲取 user 對象的 name 屬性。

  • 方法調用:使用 # 可以調用對象的方法。例如,#math.max(1, 2) 可以調用 math 對象的 max 方法。

  • 數組和集合訪問:使用 # 可以訪問數組和集合的元素。例如,#users[0] 可以獲取 users 集合的第一個元素。

$?符號

在 Spring 中,$ 符號通常用于屬性占位符,它允許你引用配置文件中的值。

  • 配置文件引用:使用 $ 可以引用外部配置文件(如 application.propertiesapplication.yml)中的值。例如,${app.name} 可以引用配置文件中的 app.name 屬性。

  • 環境變量引用:使用 $ 也可以引用環境變量。例如,${ENV_VAR} 可以引用名為 ENV_VAR 的環境變量。

示例

使用?#?符號

假設你有一個 User 類,并且想要在 Spring 中通過 SpEL 獲取 User 對象的 name 屬性:

java復制

public class User {private String name;// getters and setters
}@Autowired
private User user;public String getUserName() {return user.getName(); // Java 代碼直接訪問// 或者使用 SpEL// return #user.name;
}
使用?$?符號

假設你的 application.properties 文件中有以下配置:

properties復制

app.name=MyApp

你可以在 Spring 應用中這樣引用它:

java復制

@Value("${app.name}")
private String appName;public void printAppName() {System.out.println(appName); // 輸出:MyApp
}

總結

  • # 符號用于 SpEL 中,用于對象圖的查詢和操作。

  • $ 符號用于屬性占位符,用于引用配置文件或環境變量中的值。

這兩個符號在 Spring 框架中扮演著不同的角色,正確使用它們可以提高代碼的靈活性和可維護性。

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

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

相關文章

docker save如何遷移鏡像更節省空間?

文章目錄 方法一&#xff1a;使用docker save命令方法二&#xff1a;直接保存多個鏡像到一個tar文件哪個方法更節省磁盤空間&#xff1f;空間效率對比實際測試示例其他優勢結論 如何用腳本遷移加載鏡像 遷移鏡像時候&#xff0c;往往會碰到基礎鏡像相同的很多鏡像需要遷移&…

全新升級 | Built For You Spring ‘25 發布,Fin 智能客服實現新突破!

圖像識別、語音交互、任務自動化&#xff0c;立即體驗智能客服蛻變&#xff01; 上周&#xff0c;Intercom 舉辦了 Built For You Spring 25 發布會&#xff0c;正式揭曉了 AI Agent Fin 的一系列令人振奮的更新。Fin 正在以前所未有的速度革新客戶支持模式——它已經成功解決了…

需求導向的K8S網絡原理分析:Kube-proxy、Flannel、Calico的地位和作用

最近發現自己似乎從來沒學明白過Kubernetes網絡通信方案&#xff0c;特開一貼復習總結一下。 在k8s中&#xff0c;每個 Pod 都擁有一個獨立的 IP 地址&#xff0c;而且假定所有 Pod 都在一個可以直接連通的、扁平的網絡空間中。所以不管它們是否允許在同一個 Node&#xff08;宿…

Vulnhub:Digitalword.local: FALL靶機滲透

將靶機按照圖中連接方式打開&#xff0c;fall在virtualBox中打開 信息收集 掃描得ip arp-scan -l 掃描端口 nmap -A -T4 -sV -p- 掃描目錄 gobuster dir -u http://192.168.117.160 -x php,txt,html -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 一個一個…

4、網工軟考—VLAN配置—hybird配置

1、實驗環境搭建&#xff1a; 2、實驗過程 SW1&#xff1a; 先創建vlan2和vlan3 [Huawei-Ethernet0/0/2]port link-type hybrid //hybird端口 [Huawei-Ethernet0/0/2]port hybrid pvid vlan 2 [Huawei-Ethernet0/0/2]port hybrid untagged vlan 10 //撕掉vlan10的標簽 …

【OCR】技術

OCR圖像識別 一、OCR是什么二、Python中如何實現OCR1.簡單應用 三、OCR的核心步驟1.?圖像預處理?&#xff08;提高識別準確率&#xff09;2.?文字識別3.?輸出結果 四、OCR到的應用場景五、注意事項六、擴展學習 此貼用來更新在工作中遇到的一些圖片解析內容 一、OCR是什么 …

深入理解 dispatchEvent:前端事件觸發的藝術

dispatchEvent 是 DOM 元素的一個方法&#xff0c;用于手動觸發/派發一個事件。這個方法允許開發者以編程方式觸發事件&#xff0c;而不是等待用戶交互或瀏覽器自動觸發。 1.基本概念 作用&#xff1a;dispatchEvent 用于在指定的 DOM 節點上觸發一個事件 使用場景&#xff1…

2025年數智化電商產業帶發展研究報告260+份匯總解讀|附PDF下載

原文鏈接&#xff1a;https://tecdat.cn/?p41286 在數字技術與實體經濟深度融合的當下&#xff0c;數智化產業帶正成為經濟發展的關鍵引擎。 從云南鮮花產業帶的直播熱銷到深圳3C數碼的智能轉型&#xff0c;數智化正重塑產業格局。2023年數字經濟規模突破53.9萬億元&#xff…

【深度學習】【目標檢測】【OnnxRuntime】【C++】YOLOV5模型部署

【深度學習】【目標檢測】【OnnxRuntime】【C】YOLOV5模型部署 提示:博主取舍了很多大佬的博文并親測有效,分享筆記邀大家共同學習討論 文章目錄 【深度學習】【目標檢測】【OnnxRuntime】【C】YOLOV5模型部署前言Windows平臺搭建依賴環境模型轉換--pytorch轉onnxONNXRuntime推…

深入解析 JSON-RPC:從基礎到高級應用(附調用示例)

在當今的軟件開發領域&#xff0c;遠程過程調用&#xff08;RPC&#xff09;技術是實現分布式系統間通信的關鍵手段之一。JSON-RPC&#xff0c;作為一種基于 JSON 數據格式的輕量級 RPC 協議&#xff0c;因其簡潔性和高效性而備受青睞。本文將全面深入地探討 JSON-RPC 的核心概…

抽象代數:群論

系列筆記為本學期上抽象代數課整理的&#xff0c;持續更新。 群的相關定義 群的定義 群是一個帶有滿足結合律、單位元、逆元的二元運算的集合&#xff0c;記作 ( G , ? ) \left({G, \cdot}\right) (G,?)。若群運算滿足結合律&#xff0c;則該集合構成半群。如果該半群中含…

線程同步——讀寫鎖

Linux——線程同步 讀寫鎖 目錄 一、基本概念 1.1 讀寫鎖的基本概念 1.2 讀寫鎖的優點 1.3 讀寫鎖的實現 1.4 代碼實現 一、基本概念 線程同步中的讀寫鎖&#xff08;Read-Write Lock&#xff09;&#xff0c;也常被稱為共享-獨占鎖&#xff08;Shared-Exclusive Lock&a…

全面解析PRN文件:從原理到可視化的完整指南 【標簽打印】

文章目錄 一、PRN文件概述二、PRN文件結構深度解析2.1 文件頭配置2.1 繪圖指令詳解2.3 文本處理方案2.4 條碼/二維碼實現2.5 RFID指令集 三、實戰&#xff1a;PRN可視化工具開發3.1 基于Canvas的實現方案3.2 坐標轉換關鍵算法 四、常見問題解決方案4.1 內容偏移問題4.2 中文亂碼…

C++:函數(通識版)

一、函數的基礎 1.什么是函數&#xff1f;&#xff08;獨立的功能單位&#xff09; 函數是C中封裝代碼邏輯的基本單元&#xff0c;用于執行特定任務。 作用&#xff1a;代碼復用、模塊化、提高可讀性。 2、函數的基本結構 返回類型 函數名(參數列表) {// 函數體return 返回值…

sql注入語句學習

說明 注入漏洞作為登頂過web十大漏洞多次的漏洞&#xff0c;危害性不言而喻&#xff0c;其中sql注入就是注入漏洞常用的手段。其形成的原因是由于web在接收傳參數據時&#xff0c;對數據的過濾不夠嚴格&#xff0c;將其帶入到數據庫查詢中&#xff0c;導致用戶可以通過傳參一些…

云鑰科技多通道工業相機解決方案設計

項目應用場景分析與需求挑戰 1. 應用場景 ?目標領域?&#xff1a;工業自動化檢測&#xff08;如精密零件尺寸測量、表面缺陷檢測&#xff09;、3D立體視覺&#xff08;如物體建模、位姿識別&#xff09;、動態運動追蹤&#xff08;如高速生產線監控&#xff09;等。 ?核心…

離散的數據及參數適合用什么算法做模型

離散數據和參數適用的機器學習算法取決于具體任務(分類、回歸、聚類等)、數據特點(稀疏性、類別數量等)以及業務需求。以下是針對離散數據的常用算法分類和選擇建議: 1. 分類任務(離散目標變量) 經典算法 決策樹(ID3/C4.5/CART) 直接處理離散特征,無需編碼,可解釋性…

VMware 安裝 Ubuntu 實戰分享

VMware 安裝 Ubuntu 實戰分享 VMware 是一款強大的虛擬機軟件&#xff0c;廣泛用于多操作系統環境的搭建。本文將詳細介紹如何在 VMware 中安裝 Ubuntu&#xff0c;并分享安裝過程中的常見問題及解決方法。 1. 安裝前的準備工作 (1) 系統要求 主機操作系統&#xff1a;Windo…

基于Promise鏈式調用的多層級請求性能優化

代碼優化-循環嵌套關聯請求 1. 背景 在實際開發中&#xff0c;我們經常會遇到需要嵌套關聯請求的場景&#xff0c;比如&#xff1a; 獲取項目列表獲取項目詳情獲取項目進度 2. 問題 在這種場景下&#xff0c;我們可能會遇到以下問題&#xff1a; 串行請求瀑布流&#xff…

puppeteer+express服務端導出頁面為pdf

以下是開發步驟&#xff1a; 1、創建目錄 puppeteer_demo 目錄&#xff0c;打開目錄 初始化項目&#xff08;命令為&#xff1a;npm init -y&#xff09; 頁面如&#xff1a; 初始化后&#xff0c;項目目錄會出現 package.json 文件 2、安裝 puppeteer &#xff0c;使用命令&a…