更新時(shí)間:2023-05-12 來(lái)源:黑馬程序員 瀏覽量:
MyBatis是一個(gè)支持普通SQL查詢、存儲(chǔ)及高級(jí)映射的持久層框架,它幾乎消除了JDBC的冗余代碼。使Java開(kāi)發(fā)人員可以使用面向?qū)ο蟮木幊趟枷雭?lái)操作數(shù)據(jù)庫(kù)。對(duì)于MyBatis的工作原理和操作流程的理解,我們先來(lái)看下面的工作流程圖。
MaBatis的工作流程
在上圖中,MyBatis操作數(shù)據(jù)庫(kù)的流程分為8個(gè)步驟,具體介紹如下。
(1)MyBatis讀取核心配置文件mybatis-config.xml
mybatis-configxml核心配置文件主要配置了MyBatis的運(yùn)行環(huán)境等信息。
(2)加載映射文件Mapperxml
Mapper.xml文件即SQL映射文件,該文件配置了操作數(shù)據(jù)庫(kù)的SQL.語(yǔ)句,需要在mybatis-oonfig.xml中加載才能執(zhí)行。mybatis-configxml 可以加載多個(gè)映射文件,每個(gè)映射文件對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一張表。
(3)構(gòu)造會(huì)話工廠
通過(guò)MyBatis的環(huán)城h配置信息構(gòu)建會(huì)話工廠SqlSessionFactory,用于創(chuàng)建SqlSession。
(4)創(chuàng)建會(huì)話對(duì)象
由會(huì)話工廠SqlSessionFactory 創(chuàng)建SqlSession對(duì)象,該對(duì)象中包含了執(zhí)行SQL.語(yǔ)句的所有方法。
(5)創(chuàng)建執(zhí)行器
會(huì)話對(duì)象本身不能直接操作數(shù)據(jù)庫(kù),MyBanis底層定義了一個(gè)Executor接口用于操作數(shù)據(jù)庫(kù),執(zhí)行器會(huì)根據(jù)SqlSessinn傳遞的參數(shù)動(dòng)態(tài)的生成需要執(zhí)行的SQL.語(yǔ)句,同時(shí)負(fù)責(zé)查詢緩存地維護(hù)
(6)封裝SQL信息
SqlSession 內(nèi)部通過(guò)執(zhí)行器Executor 操作數(shù)據(jù)庫(kù),執(zhí)行器將待處理的SQL.信息封裝到MappelStatement對(duì)象中,MappedlStatement對(duì)象中存儲(chǔ)了要映射的SQL.語(yǔ)句的id、參數(shù)等。Mappetxml文件中一個(gè)SQL語(yǔ)句對(duì)應(yīng)一個(gè)MappedStatement 對(duì)象,SQL語(yǔ)句的id即是MappedStatement 的id。Eveeator 執(zhí)行器會(huì)在執(zhí)行SQL語(yǔ)句之前,通過(guò)MappelStatement對(duì)象將輸人的參數(shù)映射到SQL.語(yǔ)句中。
(7)操作數(shù)據(jù)庫(kù)
根據(jù)動(dòng)態(tài)生成的SQL操作數(shù)據(jù)庫(kù)。
(8)輸出結(jié)果映射
執(zhí)行SQL.語(yǔ)句之后,通過(guò)MappedStatement對(duì)象將輸出結(jié)果映射至Java對(duì)象中。通過(guò)上面對(duì)MyBatis框架工作原理的講解,相信讀者對(duì)MyBatis框架已經(jīng)有了一個(gè)初步的了解。