目錄
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 服務的特點:
-
無狀態(Stateless): 每個請求從客戶端到服務器必須包含所有必要的信息來理解和處理請求,服務器不會存儲任何會話信息。
-
統一接口(Uniform Interface): 通過統一和預定義的接口簡化和標準化架構之間的交互。RESTful API 通常使用標準的 HTTP 方法(如 GET、POST、PUT、DELETE)來操作資源。
-
可緩存(Cacheable): 響應可以被標記為可緩存或不可緩存。這可以減少網絡通信量,提高響應速度。
-
分層系統(Layered System): 客戶端不能通常不能直接知道它是否正在與中間層(如代理服務器、網關或應用服務器)通信,還是直接與最終服務器通信。
-
按需代碼(Code on Demand,可選): 服務器可以按需向客戶端發送代碼(如 JavaScript),以擴展客戶端的功能。
-
超文本傳輸協議(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.properties或application.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 框架中扮演著不同的角色,正確使用它們可以提高代碼的靈活性和可維護性。