全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

MyBatis框架操作數(shù)據(jù)庫(kù)有哪些步驟?

更新時(shí)間:2020-12-18 來(lái)源:黑馬程序員 瀏覽量:

為了使讀者能夠更加清晰的理解MyBatis程序,在正式講解MyBatis入門(mén)案例之前,先來(lái)了解一下MyBatis程序的工作原理,如圖1所示。

MyBatis的工作原理

圖1 MyBatis框架執(zhí)行流程圖

從圖1可以看出,MyBatis框架在操作數(shù)據(jù)庫(kù)時(shí),大體經(jīng)過(guò)了8個(gè)步驟。下面就對(duì)圖6-4中的每一步流程進(jìn)行詳細(xì)講解,具體如下。

(1)讀取MyBatis配置文件mybatis-config.xml。mybatis-config.xml作為MyBatis的全局配置文件,配置了MyBatis的運(yùn)行環(huán)境等信息,其中主要內(nèi)容是獲取數(shù)據(jù)庫(kù)連接。

(2)加載映射文件Mapper.xml。Mapper.xml文件即SQL映射文件,該文件中配置了操作數(shù)據(jù)庫(kù)的SQL語(yǔ)句,需要在mybatis-config.xml中加載才能執(zhí)行。mybatis-config.xml可以加載多個(gè)配置文件,每個(gè)配置文件對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一張表。

(3)構(gòu)建會(huì)話(huà)工廠。通過(guò)MyBatis的環(huán)境等配置信息構(gòu)建會(huì)話(huà)工廠SqlSessionFactory。

(4)創(chuàng)建SqlSession對(duì)象。由會(huì)話(huà)工廠創(chuàng)建SqlSession對(duì)象,該對(duì)象中包含了執(zhí)行SQL的所有方法。

(5)MyBatis底層定義了一個(gè)Executor接口來(lái)操作數(shù)據(jù)庫(kù),它會(huì)根據(jù)SqlSession傳遞的參數(shù)動(dòng)態(tài)的生成需要執(zhí)行的SQL語(yǔ)句,同時(shí)負(fù)責(zé)查詢(xún)緩存的維護(hù)。

(6)在Executor接口的執(zhí)行方法中,包含一個(gè)MappedStatement類(lèi)型的參數(shù),該參數(shù)是對(duì)映射信息的封裝,用來(lái)存儲(chǔ)要映射的SQL語(yǔ)句的id、參數(shù)等。Mapper.xml文件中一個(gè)SQL對(duì)應(yīng)一個(gè)MappedStatement對(duì)象,SQL的id即是MappedStatement的id。

(7)輸入?yún)?shù)映射。在執(zhí)行方法時(shí),MappedStatement對(duì)象會(huì)對(duì)用戶(hù)執(zhí)行SQL語(yǔ)句的輸入?yún)?shù)進(jìn)行定義(可以定義為Map、List類(lèi)型、基本類(lèi)型和POJO類(lèi)型),Executor執(zhí)行器會(huì)通過(guò)MappedStatement對(duì)象在執(zhí)行SQL前,將輸入的Java對(duì)象映射到SQL語(yǔ)句中。這里對(duì)輸入?yún)?shù)的映射過(guò)程就類(lèi)似于JDBC編程中對(duì)preparedStatement對(duì)象設(shè)置參數(shù)的過(guò)程。

(8)輸出結(jié)果映射。在數(shù)據(jù)庫(kù)中執(zhí)行完SQL語(yǔ)句后,MappedStatement對(duì)象會(huì)對(duì)SQL執(zhí)行輸出的結(jié)果進(jìn)行定義(可以定義為Map和List類(lèi)型、基本類(lèi)型、POJO類(lèi)型),Executor執(zhí)行器會(huì)通過(guò)MappedStatement對(duì)象在執(zhí)行SQL語(yǔ)句后,將輸出結(jié)果映射至Java對(duì)象中。這種將輸出結(jié)果映射到Java對(duì)象的過(guò)程就類(lèi)似于JDBC編程中對(duì)結(jié)果的解析處理過(guò)程。

通過(guò)上面對(duì)MyBatis框架執(zhí)行流程的講解,相信讀者對(duì)MyBatis框架已經(jīng)有了一個(gè)初步的了解。對(duì)于初學(xué)者來(lái)說(shuō),上面所講解的內(nèi)容可能不會(huì)完全理解,現(xiàn)階段也不要求讀者能完全理解,這里講解MyBatis框架的執(zhí)行過(guò)程是為了方便后面程序的學(xué)習(xí)。在學(xué)習(xí)完MyBatis框架后,讀者自然就會(huì)明白上面所講解的內(nèi)容了。


猜你喜歡:

MyBatis是什么?有什么作用?

MyBatis中使用#和$有什么區(qū)別?

Mybatis執(zhí)行SQL命令是怎么實(shí)現(xiàn)的?

Java高級(jí)軟件工程師培訓(xùn)課程

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!