
??????教程全知識(shí)點(diǎn)簡(jiǎn)介:學(xué)習(xí)目標(biāo) 一、Spring簡(jiǎn)介 2 初識(shí)Spring 3 Spring體系結(jié)構(gòu) 二、IOC和DI入門(mén)案例【重點(diǎn)】 五、Bean的生命周期【了解】 問(wèn)題導(dǎo)入 1 生命周期相關(guān)概念介紹 2 代碼演示 3 Bean銷(xiāo)毀時(shí)機(jī) 六、依賴(lài)注入(DI配置) 1 依賴(lài)注入方式【重點(diǎn)】 2 依賴(lài)自動(dòng)裝配【理解】 3 集合注入 今日目標(biāo) 一、第三方資源配置管理 1 管理DataSource連接池對(duì)象 2 加載properties屬性文件【重點(diǎn)】 四、Spring整合其他技術(shù)【重點(diǎn)】 二、AOP案例 1 案例-測(cè)量業(yè)務(wù)層接口萬(wàn)次執(zhí)行效率 2 AOP切入點(diǎn)數(shù)據(jù)獲取 2 Spring事務(wù)角色【理解】 二、請(qǐng)求與響應(yīng) 1 請(qǐng)求映射路徑【重點(diǎn)】 2 請(qǐng)求參數(shù) 3 日期類(lèi)型參數(shù)傳遞【重點(diǎn)】 4 響應(yīng) 三、REST風(fēng)格 1 REST簡(jiǎn)介 2 RESTful入門(mén)案例 3 REST快速開(kāi)發(fā)【重點(diǎn)】 今日內(nèi)容 一、SSM整合【重點(diǎn)】 1 SSM整合配置 三、異常處理器【理解】 1 異常介紹 2 異常處理器 一、分模塊開(kāi)發(fā)與設(shè)計(jì) 1. 分模塊開(kāi)發(fā)的意義 模塊拆分原則 2. 分模塊開(kāi)發(fā)(模塊拆分) 二、依賴(lài)管理 1. 依賴(lài)傳遞 2. 可選依賴(lài) 4 可選依賴(lài)和排除依賴(lài)的區(qū)別 三、聚合與繼承 1. 聚合工程 3. 繼承關(guān)系 5. 聚合與繼承的區(qū)別 四、屬性管理 1. 屬性 2. 版本管理 五、多環(huán)境配置與應(yīng)用 1. 多環(huán)境配置作用 2. 跳過(guò)測(cè)試(了解) 六、私服 2. 私服倉(cāng)庫(kù)分類(lèi) 3. 資源上傳與下載 附件1:POM文件總體配置說(shuō)明 一、MyBatisPlus簡(jiǎn)介 1. 入門(mén)案例 二、標(biāo)準(zhǔn)數(shù)據(jù)層開(kāi)發(fā) 2. Lombok插件介紹 四、DML編程控制 1. id生成策略控制(Insert) 2. 多記錄操作(批量Delete/Select) 3. 邏輯刪除(Delete/Update) 4. 樂(lè)觀鎖(Update)

??????????本站這篇博客:???http://www.itdecent.cn/p/4f06100b7791 ???中查看
??????????本站這篇博客:???http://www.itdecent.cn/p/4f06100b7791 ???中查看
??????????本站這篇博客:???http://www.itdecent.cn/p/7a9b4ad53b4a ???中查看
? 本教程項(xiàng)目亮點(diǎn)
?? 知識(shí)體系完整:覆蓋從基礎(chǔ)原理、核心方法到高階應(yīng)用的全流程內(nèi)容
?? 全技術(shù)鏈覆蓋:完整前后端技術(shù)棧,涵蓋開(kāi)發(fā)必備技能
?? 從零到實(shí)戰(zhàn):適合 0 基礎(chǔ)入門(mén)到提升,循序漸進(jìn)掌握核心能力
?? 豐富文檔與代碼示例:涵蓋多種場(chǎng)景,可運(yùn)行、可復(fù)用
?? 工作與學(xué)習(xí)雙參考:不僅適合系統(tǒng)化學(xué)習(xí),更可作為日常開(kāi)發(fā)中的查閱手冊(cè)
?? 模塊化知識(shí)結(jié)構(gòu):按知識(shí)點(diǎn)分章節(jié),便于快速定位和復(fù)習(xí)
?? 長(zhǎng)期可用的技術(shù)積累:不止一次學(xué)習(xí),而是能伴隨工作與項(xiàng)目長(zhǎng)期參考
??????全教程總章節(jié)


??????本篇主要內(nèi)容
今日內(nèi)容
- 能夠掌握SSM整合的流程
- 能夠編寫(xiě)SSM整合功能模塊類(lèi)
- 能夠使用Result統(tǒng)一表現(xiàn)層響應(yīng)結(jié)果
- 能夠編寫(xiě)異常處理器進(jìn)行項(xiàng)目異常
- 能夠完成SSM整合前端頁(yè)面發(fā)送請(qǐng)求實(shí)現(xiàn)增刪改查操作
- 能夠編寫(xiě)攔截器并配置攔截器
一、SSM整合【重點(diǎn)】
1 SSM整合配置
問(wèn)題導(dǎo)入
請(qǐng)描述“SSM整合流程”中各個(gè)配置類(lèi)的作用?
1.1 SSM整合流程
- 創(chuàng)建工程
- SSM整合
- Spring
- SpringConfig
- MyBatis
- MybatisConfig
- JdbcConfig
- jdbc.properties
- SpringMVC
- ServletConfig
- SpringMvcConfig
- Spring
- 功能模塊
- 表與實(shí)體類(lèi)
- dao(接口+自動(dòng))
- service(接口+實(shí)現(xiàn)類(lèi))
- 業(yè)務(wù)層接口測(cè)試(整合JUnit)
- controller
- 表現(xiàn)層接口測(cè)試(PostMan)
1.2 SSM整合配置
1.2.1 創(chuàng)建工程,添加依賴(lài)和插件
<img src="https://upload-images.jianshu.io/upload_images/29644671-8ef7dc4a6b23b255.png" alt="image-20210805164125741" style="zoom:25%;" />
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
1.2.2 Spring整合Mybatis
- 創(chuàng)建數(shù)據(jù)庫(kù)和表
-- 創(chuàng)建ssm_db數(shù)據(jù)庫(kù)
CREATE DATABASE IF NOT EXISTS ssm_db CHARACTER SET utf8;
-- 使用ssm_db數(shù)據(jù)庫(kù)
USE ssm_db;
-- 創(chuàng)建tbl_book表
CREATE TABLE tbl_book(
id INT PRIMARY KEY AUTO_INCREMENT, -- 圖書(shū)編號(hào)
TYPE VARCHAR(100), -- 圖書(shū)類(lèi)型
NAME VARCHAR(100), -- 圖書(shū)名稱(chēng)
description VARCHAR(100) -- 圖書(shū)描述
);
-- 添加初始化數(shù)據(jù)
INSERT INTO tbl_book VALUES(NULL,'計(jì)算機(jī)理論','Spring實(shí)戰(zhàn) 第5版','Spring入門(mén)經(jīng)典教材,深入理解Spring原理技術(shù)內(nèi)幕');
INSERT INTO tbl_book VALUES(NULL,'計(jì)算機(jī)理論','Spring 5核心原理與30個(gè)類(lèi)手寫(xiě)實(shí)戰(zhàn)','十年沉淀之作,手寫(xiě)Spring精華思想');
INSERT INTO tbl_book VALUES(NULL,'計(jì)算機(jī)理論','Spring 5設(shè)計(jì)模式','深入Spring源碼剖析,Sp
## 二、表現(xiàn)層數(shù)據(jù)封裝【重點(diǎn)】
### 問(wèn)題導(dǎo)入
目前 表現(xiàn)層響應(yīng)給客戶(hù)端的數(shù)據(jù)有哪幾種?
### 1 表現(xiàn)層響應(yīng)數(shù)據(jù)的問(wèn)題
問(wèn)題: 表現(xiàn)層增刪改方法返回true或者false表示是否成功,getById()方法返回一個(gè)json對(duì)象,getAll()方法返回一個(gè)json對(duì)象數(shù)組,這里就出現(xiàn)了三種格式的響應(yīng)結(jié)果,極其不利于前端解析。

解決: 需要統(tǒng)一響應(yīng)結(jié)果的格式
### 2 定義Result類(lèi)封裝響應(yīng)結(jié)果
#### 2.1 Result類(lèi)封裝響應(yīng)結(jié)果
```java
public class Result {
//描述統(tǒng)一格式中的數(shù)據(jù)
private Object data;
//描述統(tǒng)一格式中的編碼,用于區(qū)分操作,可以簡(jiǎn)化配置0或1表示成功失敗
private Integer code;
//描述統(tǒng)一格式中的消息,可選屬性
private String msg;
public Result() {
}
public Result(Integer code,Object data) {
this.data = data;
this.code = code;
}
public Result(Integer code, Object data, String msg) {
this.data = data;
this.code = code;
this.msg = msg;
}
//同學(xué)們自己添加getter、setter、toString()方法
}
注意事項(xiàng):
Result類(lèi)中的字段并不是固定的,可以根據(jù)需要自行增減
2.2 Code類(lèi)封裝響應(yīng)碼
//狀態(tài)碼
[RabbitMQ Java 客戶(hù)端](https://www.rabbitmq.com/java-client.html)
public class Code {
public static final Integer SAVE_OK = 20011;
public static final Integer DELETE_OK = 20021;
public static final Integer UPDATE_OK = 20031;
public static final Integer GET_OK = 20041;
public static final Integer SAVE_ERR = 20010;
public static final Integer DELETE_ERR = 20020;
public static final Integer UPDATE_ERR = 20030;
public static final Integer GET_ERR = 20040;
}
注意事項(xiàng):
Code類(lèi)的常量設(shè)計(jì)也不是固定的,可以根據(jù)需要自行增減,例如將查詢(xún)?cè)龠M(jìn)行細(xì)分為GET_OK,GET_ALL_OK,GET_PAGE_OK
3 表現(xiàn)層數(shù)據(jù)封裝返回Result對(duì)象
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
@PostMapping
public Result save(@RequestBody Book book) {
boolean flag = bookService.save(book);
return new Result(flag ? Code.SAVE_OK:Code.SAVE_ERR,flag);
}
@PutMapping
public Result update(@RequestBody Book book) {
boolean flag = bookService.update(book);
return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);
}
@DeleteMapping("/{id}")
public Result delete(@PathVariable Integer id) {
boolean flag = bookService.delete(id);
return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag);
}
@GetMapping("/{id}")
public Result getById(@PathVariable Integer id) {
Book book = bookService.getById(id);
Integer code = book != null ? Code.GET_OK : Code.GET_ERR;
String msg = book != null ? "" : "數(shù)據(jù)查詢(xún)失敗,請(qǐng)重試!";
return new Result(code,book,msg);
[Dropwizard Metrics](https://metrics.dropwizard.io/)
}
@GetMapping
public Result getAll() {
List<Book> bookList = bookService.get