MyBatis的架构和其运行流程
0x00:MyBatis 架構(gòu)組成
MyBatis 整體的架構(gòu)組成為:數(shù)據(jù)源配置文件、SQL 映射配置文件、會話工廠、會話、執(zhí)行器以及底層封裝對象組成。
0x01:數(shù)據(jù)源配置文件
對于持久層框架,連接數(shù)據(jù)庫是最重要的一步。MyBatis 框架對于數(shù)據(jù)庫連接的配置信息采用了數(shù)據(jù)庫連接池的形式。數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理、和釋放數(shù)據(jù)庫連接,其只使用一個連接,提高了操作性能。不像 JDBC,每次對數(shù)據(jù)庫操作,都需要連接然后釋放,這也是 MyBatis 相對 JDBC 其中的一個優(yōu)點。
程序本身就不用再關(guān)心數(shù)據(jù)庫的配置信息,交給 MyBatis 配置文件管理即可。文件名為 SqlMapConfig.xml。其中配置了數(shù)據(jù)庫驅(qū)動、數(shù)據(jù)庫連接地址、數(shù)據(jù)庫用戶名和密碼、事務(wù)管理等參數(shù)。例如以下示例:
連接池中的 org.git.mm.mysql.Driver 是 com.mysql.jdbc.Driver 的之類,也是 Mysql 數(shù)據(jù)庫的連接驅(qū)動,如果項目中有整合 SpringMVC 框架時,則連接池可配在 SpringMVC 的配置文件中。
0x02:SQL 映射配置文件
在 JDBC 中,sql 語句一般會寫在 java 文件中,而 MyBatis 會將這些 sql 語句單獨放在配置文件中 Mapper.xml。
作用流程:MyBatis 會根據(jù)配置文件中的參數(shù)配置,將組裝了參數(shù)的 Java 對象或 Map 對象中的相關(guān)字段與 Mapper.xml 中的參數(shù)配置做匹配,將相關(guān)參數(shù)綁定到需要執(zhí)行的 sql 語句上。其 Mapper.xml 配置文件,完成了對 sql 語句的映射配置。例如以下示例:
其中,id 是 sql 語句要綁定的字段名,parameterType 是綁定字段的類型,resultType 是把結(jié)果映射為一個 Java 對象。
Mapper.xml 文件一般配置在 SqlMapConfig.xml 中,示例代碼如下:
0x03:會話工廠與會話
當(dāng)數(shù)據(jù)庫連接池配置文件 SqlMapConfig.xml 和 sql 映射配置文件 Mapper.xml 都準(zhǔn)備好后,就需要相關(guān)的程序來讀取并加載這些配置文件的信息,MyBatis 用來處理這些配置文件的核心對象就是會話工廠與會話。
MyBatis 中,會話工廠是 SqlSessionFactory 類。SqlSessionFactory 會根據(jù)數(shù)據(jù)庫配置信息產(chǎn)生可以連接數(shù)據(jù)庫并與其交互的 SqlSession 會話實例類。而 SqlSession 實例類,便會依照 Mapper 配置文件中的 sql 配置,對數(shù)據(jù)庫執(zhí)行增刪改查的操作。
0x04:執(zhí)行器和底層封裝對象
SqlSession 類內(nèi)部是通過執(zhí)行器 Executor 對數(shù)據(jù)庫進(jìn)行操作的,執(zhí)行器 Executor 與數(shù)據(jù)庫交互,依靠的是底層封裝對象 Mappered Statement,這個底層對象 Mappered Statement 封裝了從 Mapper 文件讀取信息的功能,讀取的內(nèi)容包括 sql 語句、輸入?yún)?shù)、輸出結(jié)果類型等。
0x05:MyBatis 運行流程
MyBatis 的運行流程其實就是其架構(gòu)的處理流程,總結(jié)下如下:
首先,SqlSessionFactory 會話工廠會加載 SqlMapConfig.xml 配置文件信息,然后生成一個可以與數(shù)據(jù)庫交互的會話實例類 SqlSession,會話實例類 SqlSession 會根據(jù) Mapper 配置文件中的 sql 配置,去執(zhí)行相應(yīng)的增刪改查操作。這樣,MyBatis 就實現(xiàn)了與數(shù)據(jù)庫的交互功能。
MyBatis 運行流程結(jié)構(gòu)圖如下:
當(dāng)了解了 MyBatis 運行流程后,會更好更容易的去學(xué)習(xí)這個框架。
總結(jié)
以上是生活随笔為你收集整理的MyBatis的架构和其运行流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot 2.0(七):S
- 下一篇: Dubbo和Spring Cloud微服