【Java開(kāi)發(fā)】Java熱門(mén)框架深入開(kāi)發(fā)第9篇:今日內(nèi)容,一、SSM整合【重點(diǎn)】【附代碼文檔】

??????教程全知識(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整合流程

  1. 創(chuàng)建工程
  2. SSM整合
    • Spring
      • SpringConfig
    • MyBatis
      • MybatisConfig
      • JdbcConfig
      • jdbc.properties
    • SpringMVC
      • ServletConfig
      • SpringMvcConfig
  3. 功能模塊
    • 表與實(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>

WildFly 文檔

Javatpoint 教程

Google Guava 文檔

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é)果,極其不利于前端解析。

![](https://upload-images.jianshu.io/upload_images/29644671-834cf7f5b34b5d32.png)

解決: 需要統(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容