在日常的后端開(kāi)發(fā)中,使用mybatis作為DAO層的持久框架已經(jīng)是慣例。但很多時(shí)候都是在別人搭好的框架中進(jìn)行開(kāi)發(fā),對(duì)怎么搭建環(huán)境是一知半解,今天就來(lái)實(shí)踐下。
一、集成分哪些步驟
來(lái)看下集成mybatis需要哪些步驟,
1、確定環(huán)境及依賴
2、配置文件;
3、測(cè)試
二、環(huán)境及依賴
這里,基于springboot集成mybatis。先看下具體的版本,
springboot:2.3.3.RELEASE
mybatis-spring-boot-starter:2.3.0
mysql驅(qū)動(dòng):8.0.32
下面具體看下這些依賴,spring-boot自不用說(shuō),就是在這個(gè)環(huán)境下的;
mybatis-spring-boot-starter
mybatis-spring-boot-starter是針對(duì)mybatis和spring-boot集成而開(kāi)發(fā)的一個(gè)依賴,里邊包含了所需的依賴,方便集成,其實(shí)spring官方還有很多這樣的starter,例,
可以看到官方提供了很多starter供開(kāi)發(fā)者使用。怎么沒(méi)看到mybatis-spring-boot-starter吶,不急,它不是官方提供的,而是mybatis官方提供的,多提一句,對(duì)于starter的命名官方也給出了這樣的建議,官方提供的spring-boot-starter-*,而第三方的則是thirdpartyproject-spring-boot-starter,
詳見(jiàn):https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/pdf/spring-boot-reference.pdf
你想創(chuàng)建自己的starter嗎,可以在文末“推薦閱讀”里找到相關(guān)的博文。
mysql驅(qū)動(dòng)也不用說(shuō),要使用程序訪問(wèn)mysql,自然少不了mysql的驅(qū)動(dòng)。
用一張圖來(lái)描述下,springboot下集成mybatis的一個(gè)邏輯流程,
我們都知道,可以在程序中直接使用JDBC訪問(wèn)mysql,也可以使用mybatis訪問(wèn)mysql,在spring的環(huán)境下則通過(guò)mybatis-spring訪問(wèn)mysql。從圖中可以看到訪問(wèn)路徑更長(zhǎng)了,那集成mybatis的意義是什么,答案是使用更簡(jiǎn)單,還記得剛學(xué)習(xí)的時(shí)候使用JDBC的噩夢(mèng)嗎?
看下,引入的依賴,我這里使用父子項(xiàng)目,采用在父pom中管理依賴,子pom使用的原則。
父pom.xml
<!--mybatis-spring-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!--mysql的驅(qū)動(dòng)-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
子pom.xml這里不再列出,看下最終的依賴,
可以看到mybatis-spring-boot-starter中已經(jīng)包含了mybatis、mybatis-spring等依賴,mybatis依賴不用單獨(dú)引了。換句話說(shuō),在spring-boot中集成mybatis且連接mysql使用下面兩個(gè)依賴即可,
1、mybatis-spring-boot-starter
2、mysql-connector-j
訪問(wèn)其他數(shù)據(jù)庫(kù)換掉驅(qū)動(dòng)即可。
三、配置文件
我們知道使用mybaits的目的是訪問(wèn)數(shù)據(jù)庫(kù),而且mybatis訪問(wèn)數(shù)據(jù)庫(kù)使用的是JDBC驅(qū)動(dòng)的方式,那么配置的話,可以分為兩塊,
1、mybatis配置
2、JDBC配置文件
3.1、mybatis配置
使用過(guò)mybatis的都了解,mybatis是基于xml的,使用xml來(lái)寫(xiě)sql實(shí)現(xiàn)數(shù)據(jù)庫(kù)的訪問(wèn),java是面向?qū)ο蟮?,所以要操作文件,或者說(shuō)調(diào)用xml中的方法需要一個(gè)對(duì)象,這個(gè)對(duì)象就是Mapper接口,所以,mybatis的配置文件有兩塊,一個(gè)是配置xml,另一個(gè)就是告訴mybatis將xml映射到哪些接口中。
application.yml中配置mybatis的xml
mybatis:
mapper-locations: classpath*:mapper/*.xml
這些xml文件在resource文件夾下,
接下來(lái)就是mapper接口,使用@MapperScan注解,在啟動(dòng)類(lèi)上配置掃描的包
這樣就完成了mybatis的配置。接下來(lái)就是JDBC的配置。
3.2、JDBC配置文件
結(jié)合之前使用JDBC的經(jīng)驗(yàn),我們知道要?jiǎng)?chuàng)建一個(gè)JDBC連接需要知道數(shù)據(jù)庫(kù)驅(qū)動(dòng)名,連接URL、用戶名、密碼,這些就可以了。這里也是配置這些,在application.yml中進(jìn)行配置,
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: root
password: 123456
這樣JDBC的配置就可以了。上邊的具體配置需要自行修改成自己的。
有小伙伴說(shuō)不對(duì),我的配置里還有多了一個(gè),
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
沒(méi)錯(cuò),多的配置是datasource的類(lèi)型,這里可以不配,默認(rèn)是com.zaxxer.hikari.HikariDataSource,當(dāng)然了也可以指定,比如使用c3p0、druid等第三方數(shù)據(jù)庫(kù)連接池,這都是可以的(前提引入相關(guān)依賴)。不配置默認(rèn)使用下面三個(gè)中的一個(gè),有興趣的可以看下org.springframework.boot.jdbc.DataSourceBuilder類(lèi)的實(shí)現(xiàn),
?
以上,就完成配置。經(jīng)過(guò)這幾步就完成了mybatis和spring-boot的集成,是不是很好奇為什么這么簡(jiǎn)單?下面簡(jiǎn)單分析下。
?
四、mybatis是怎么集成到springboot中的
講這個(gè)問(wèn)題之前,先要達(dá)成一個(gè)共識(shí):spring是一個(gè)bean的容器,管理bean的生命周期。
來(lái)看下mybatis中的Mapper接口,該接口會(huì)被實(shí)例化為一個(gè)代理對(duì)象,在代理對(duì)象中有一個(gè)sqlSession的變量,該變量是SqlSessionTemplate類(lèi)型的,SqlSessionTemplate是mybatis中的類(lèi),
它是怎么被注入到spring管理的類(lèi)中,答案是通過(guò)MybatisAutoConfiguration這個(gè)類(lèi),該類(lèi)在mybatis-spring-boot-starter中,有這樣一個(gè)方法,
該方法會(huì)生成一個(gè)sqlSessionTemplate,這樣就可以和mybatis聯(lián)系在一起了,而更有意思的是下面這個(gè)方法,生成sqlSessionFactory的方法,追蹤該方法可以看到mybatis的源碼中,并熟悉整個(gè)流程。
感興趣的小伙伴可以自己看下源碼哦,同時(shí)也可以看“推薦閱讀”中有關(guān)mybaits源碼的分析。
?
五、總結(jié)
關(guān)于spring-boot集成mybatis的有關(guān)問(wèn)題就分享到這兒了,遵循下面幾點(diǎn),
1、添加相關(guān)依賴,mybatis-spring-boot-starter、數(shù)據(jù)庫(kù)驅(qū)動(dòng);
2、mybatis的配置,掃描mapper接口、加載xml文件;
3、數(shù)據(jù)源配置,驅(qū)動(dòng)類(lèi)、url、user、password等;
最后,本文用到的源碼均可關(guān)注下方公眾號(hào)獲得,歡迎與志同道合的你一起交流學(xué)習(xí)。
推薦閱讀
我的第一個(gè)springboot ?starter
mybatis源碼配置文件解析之一:解析properties標(biāo)簽文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-474063.html
springboot引入mybatis遇到的坑文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474063.html
到了這里,關(guān)于spring-boot集成mybatis真的很簡(jiǎn)單嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!