Spring Boot整合MyBatis框架袁庭新老師帶你快速搞定
在開發(fā)中,我們通常會(huì)對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行操作,Sprirng Boot對(duì)關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)的訪問(wèn)操作都提供了非常好的整合支持。
01?SpringBoot數(shù)據(jù)訪問(wèn)概述
Spring Data是Spring提供的一個(gè)用于簡(jiǎn)化數(shù)據(jù)庫(kù)訪問(wèn)、支持云服務(wù)的開源框架。它是一個(gè)傘形項(xiàng)目,包含了大量關(guān)系型數(shù)據(jù)庫(kù)及非關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn)解決方案,其設(shè)計(jì)目的是使我們可以快速且簡(jiǎn)單地使用各種數(shù)據(jù)訪問(wèn)技術(shù)。Spring Boot默認(rèn)采用整合Spring Data的方式統(tǒng)一處理數(shù)據(jù)訪問(wèn)層,通過(guò)添加大量自動(dòng)配置,引入各種數(shù)據(jù)訪問(wèn)模板xxxTemplate以及統(tǒng)一的Repository接口,從而達(dá)到簡(jiǎn)化數(shù)據(jù)訪問(wèn)層的操作。

Spring Data提供了多種類型數(shù)據(jù)庫(kù)支持,Spring Boot對(duì)Spring Data支持的數(shù)據(jù)庫(kù)進(jìn)行了整合管理,提供了各種依賴啟動(dòng)器。通過(guò)一張表羅列Spring Boot提供的常見(jiàn)數(shù)據(jù)庫(kù)依賴啟動(dòng)器。

02?SpringBoot整合MyBatis實(shí)現(xiàn)
MyBatis是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射,避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis可以使用簡(jiǎn)單的XML或注解配置和映射原生信息,并將接口和Java的POJO(Plain Old Java Objects,普通Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。
MyBatis作為操作數(shù)據(jù)庫(kù)的流行框架,Spring Boot沒(méi)有提供MyBatis場(chǎng)景依賴,但是MyBatis開發(fā)團(tuán)隊(duì)自己適配了Spring Boot,提供了mybatis-spring-starter依賴啟動(dòng)器實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)操作。進(jìn)一步簡(jiǎn)化了MyBatis對(duì)數(shù)據(jù)的操作。
2.1?基礎(chǔ)環(huán)境搭建
實(shí)現(xiàn)Spring Boot與數(shù)據(jù)訪問(wèn)層框架(例如MyBatis)的整合非常簡(jiǎn)單,主要是引入對(duì)應(yīng)的依賴啟動(dòng)器,并進(jìn)行數(shù)據(jù)庫(kù)相關(guān)參數(shù)設(shè)置即可。
2.1.1 數(shù)據(jù)準(zhǔn)備
1.在MySQL中創(chuàng)建一個(gè)名稱為springbootdata的數(shù)據(jù)庫(kù)。
2.在該數(shù)據(jù)庫(kù)中創(chuàng)建兩個(gè)表t_article和t_comment。
2.1.2 搭建項(xiàng)目
1.創(chuàng)建一個(gè)項(xiàng)目名稱為chapter03的Spring Initializr類型的項(xiàng)目。在Dependencies依賴中選擇SQL模塊中的MySQL和MyBatis依賴。

2.編寫數(shù)據(jù)庫(kù)表對(duì)應(yīng)的實(shí)體類。在com.cy.domain包下,并在該包中編寫與數(shù)據(jù)庫(kù)表t_article和t_comment對(duì)應(yīng)的實(shí)體類Comment和Article類。
(1) 在com.cy.domain包下創(chuàng)建Comment實(shí)體類。
(2) 在com.cy.domain包下創(chuàng)建Article實(shí)體類。
2.1.3 編寫配置文件
1.在application.properties配置文件中編寫對(duì)應(yīng)的MySQL數(shù)據(jù)庫(kù)連接配置。
2.數(shù)據(jù)源類型選擇配置。Spring Boot 1.x版本默認(rèn)使用的是tomcat.jdbc數(shù)據(jù)源,Sprng Boot 2.x版本默認(rèn)使用的是Hikari數(shù)據(jù)源。如果使用其他數(shù)據(jù)源,還需要進(jìn)行額外配置。這里選擇使用阿里巴巴的Druid數(shù)據(jù)源。在pom.xml文件中添加Druid數(shù)據(jù)源的依賴啟動(dòng)器。
注意:引入的druid-spring-boot-starter依賴,是阿里巴巴為了迎合Spring Boot項(xiàng)目而適配的Druid數(shù)據(jù)源啟動(dòng)器,當(dāng)在pom.xml文件中引入該啟動(dòng)器后,不需要再進(jìn)行其他額外配置,Spring Boot項(xiàng)目會(huì)自動(dòng)識(shí)別配置Druid數(shù)據(jù)源。
3.上述配置的Druid數(shù)據(jù)源啟動(dòng)器內(nèi)部已經(jīng)初始化了一些運(yùn)行參數(shù)(例如initialSize、maxActive等),如果開發(fā)過(guò)程中需要修改第三方Druid的運(yùn)行參數(shù),則必須在全局配置文件中修改。
說(shuō)明:在application.properties中添加上述配置后,會(huì)發(fā)現(xiàn)配置的initialSize、minIdle和maxActive屬性底色為黃色(IDEA開發(fā)工具中的顯示色),是因?yàn)樵赟pring Boot提供的數(shù)據(jù)源自動(dòng)配置類org.springframework.boot.autoconfigure.jdbc.DataSourceProperties中,沒(méi)有與這些參數(shù)對(duì)應(yīng)的默認(rèn)屬性,所以這些設(shè)置的屬性值無(wú)法識(shí)別和生效。因此需要編寫一個(gè)自定義配置類,將配置文件中的屬性注入到Druid數(shù)據(jù)源屬性中。
4.在com.cy.config包下創(chuàng)建一個(gè)DataSourceConfig自定義配置類對(duì)Druid數(shù)據(jù)源屬性值進(jìn)行注入。
2.2?使用注解的方式整合MyBatis
1.創(chuàng)建Mapper接口文件。在com.cy.mapper包下創(chuàng)建一個(gè)用于對(duì)數(shù)據(jù)庫(kù)表t_comment數(shù)據(jù)操作的接口CommentMapper。
說(shuō)明:在對(duì)應(yīng)的接口類上添加@Mapper注解,如果編寫的Mapper接口過(guò)多時(shí),需要重復(fù)為每一個(gè)接口文件添加@Mapper注解,為了避免這種麻煩,可以直接在Spring Boot項(xiàng)目啟動(dòng)類上添加@MapperScan("xxx")注解,參數(shù)必須指定需要掃描的具體包名。
2.在com.cy測(cè)試包下創(chuàng)建MyBatisTests類,并在MyBatisTests類中引入CommentMapper接口,并對(duì)接口中方法進(jìn)行測(cè)試。
3.會(huì)發(fā)現(xiàn)控制臺(tái)中查詢的Comment的articleId屬性值為null,沒(méi)有映射成功。這是因?yàn)榫帉懙膶?shí)體類Comment中使用了駝峰命名方式將t_comment表中的article_id字段設(shè)計(jì)成了articleId屬性,所以無(wú)法正確映射查詢結(jié)果。為了解決上述由于駝峰命名方式造成的表字段值無(wú)法正確映射到類屬性的情況,可以在Spring Boot全局配置文件application.properties中添加開啟駝峰命名匹配映射配置。
2.3?使用配置文件的方式整合MyBatis
Spring Boot與MyBatis整合使用時(shí),不僅支持注解方式,還支持XML配置文件的方式。
1.在com.cy.mapper包中創(chuàng)建一個(gè)操作數(shù)據(jù)表t_article的接口ArticleMapper。
2.創(chuàng)建XML映射文件。在resources目錄下,創(chuàng)建一個(gè)統(tǒng)一管理映射文件的包mapper,并在該包下編寫與ArticleMapper接口對(duì)應(yīng)的映射文件ArticleMapper.xml。
3.配置XML映射文件路徑。在全局配置文件application.properties中添加MyBatis映射文件路徑的配置,同時(shí)需要添加實(shí)體類別名映射路徑。
4.編寫單元測(cè)試進(jìn)行接口方法測(cè)試。在測(cè)試類MyBatisTests中對(duì)接口方法進(jìn)行測(cè)試。
今天的內(nèi)容,袁老師就給大家介紹到這里,現(xiàn)在你學(xué)會(huì)了嗎?關(guān)注「袁庭新」,干貨天天都不斷!
