教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Mybatis原理介紹:MyBatis如何操作數(shù)據(jù)庫?

更新時(shí)間:2020年12月18日15時(shí)08分 來源:傳智教育 瀏覽次數(shù):

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

MyBatis的工作原理

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

從圖1可以看出,MyBatis框架在操作數(shù)據(jù)庫時(shí),大體經(jīng)過了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ù)庫連接。

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

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

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

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

(6)在Executor接口的執(zhí)行方法中,包含一個(gè)MappedStatement類型的參數(shù),該參數(shù)是對(duì)映射信息的封裝,用來存儲(chǔ)要映射的SQL語句的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ì)用戶執(zhí)行SQL語句的輸入?yún)?shù)進(jìn)行定義(可以定義為Map、List類型、基本類型和POJO類型),Executor執(zhí)行器會(huì)通過MappedStatement對(duì)象在執(zhí)行SQL前,將輸入的Java對(duì)象映射到SQL語句中。這里對(duì)輸入?yún)?shù)的映射過程就類似于JDBC編程中對(duì)preparedStatement對(duì)象設(shè)置參數(shù)的過程。

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

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


猜你喜歡:

MyBatis是什么?有什么作用?

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

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

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

0 分享到:
和我們?cè)诰€交談!