mybatis的工作原理
由以上圖可以看出,mybatis框架在操作數(shù)據(jù)庫時大致經(jīng)過了8個步驟。對這8個步驟分析如下:
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可以加載多個配置文件,每個配置文件對應(yīng)數(shù)據(jù)庫中的一張表。
3)構(gòu)建會話工廠。通過mybatis的環(huán)境等配置信息構(gòu)建會話工廠SqlSessionFactory。
4)創(chuàng)建SQLSession對象。由會話工廠創(chuàng)建SQLSession對象,該對象中包含了執(zhí)行SQL的所有方法。
5)Mybatis的底層定義了一個Executor接口來操作數(shù)據(jù)庫,它會根據(jù)SQLSession傳遞的參數(shù)動態(tài)的生成需要執(zhí)行的SQL語句,同時負(fù)責(zé)查詢緩存的維護(hù)。
6)在Executor接口的方法中,包含一個MappedStatement類型的參數(shù),該參數(shù)是對映射信息的封裝,用于存儲要映射的SQL語句的id、參數(shù)等。Mapper.xml文件中的一個SQL對應(yīng)一個MappedStatement對象,SQL的id即是MappedStatement的id。
7)輸入映射參數(shù)。在執(zhí)行方法時,MappedStatement對象會對用戶執(zhí)行SQL語句的輸入?yún)?shù)進(jìn)行定義(可以定義為Map、List類型、基本類型和POJO類型),Executor執(zhí)行器會通過MappedStatement對象在執(zhí)行SQL前,將輸入的java對象映射到SQL語句中。這里對輸入?yún)?shù)的映射過程就類似于JDBC編程中對preparedStatement對象設(shè)置參數(shù)的過程。
8)輸出結(jié)果映射。在數(shù)據(jù)庫中執(zhí)行完SQL語句后,MappedStatement對象會對SQL執(zhí)行輸出的結(jié)果進(jìn)行定義(可以定義為Map、List類型、基本類型、POJO類型),Executor執(zhí)行器會通過MappedStatement對象在執(zhí)行SQL語句后,將輸出結(jié)果映射到j(luò)ava對象中。這種將輸出結(jié)果映射到j(luò)ava對象的過程就類似于JDBC編程中對結(jié)果的解析處理過程。
以上就是mybatis工作的基本原理。
ORM映射框架常見的有兩種,即hibernate和mybatis,他們的區(qū)別如下:
hibernate:它是一個全表映射的框架。通常開發(fā)者只需要定義好持久化對象到數(shù)據(jù)庫表的映射關(guān)系就可以通過hibernate提供的方法完成持久層的操作了,開發(fā)者并不需要熟練的掌握sql語句的編寫,hibernate會根據(jù)指定的存儲邏輯,自動的生成對應(yīng)的sql并調(diào)用JDBC接口來執(zhí)行,所以hibernate的開發(fā)效率比mybatis稍高些。
但hibernate也有缺點,例如:它在多表關(guān)聯(lián)時對SQL查詢的支持較差、更新數(shù)據(jù)時要發(fā)送所有的字段、不支持存儲過程、不能通過優(yōu)化SQL來優(yōu)化性能等等。
這些問題導(dǎo)致hibernate只適合在場景不太復(fù)雜且對性能要求不高的項目中使用。
mybatis:它是一個半自動映射的框架。這里的所謂半自動是相對于hibernate的全表映射而言的,mybatis需要手動匹配提供POJO、SQL和映射關(guān)系,而hibernate只需提供POJO和映射關(guān)系即可。與hibernate相比,雖然使用mybatis需要手動編寫SQL,但是mybatis可以配置動態(tài)SQL并優(yōu)化SQL,可以通過配置決定SQL的映射規(guī)則,它還支持存儲過程等優(yōu)點。
因此mybatis常用于比較復(fù)雜和需要優(yōu)化性能的項目,互聯(lián)網(wǎng)項目中通常都使用mybatis。
參考博文:(1) https://www.cnblogs.com/luoxn28/p/6417892.html
(2) https://blog.csdn.net/Song_JiangTao/article/details/80022214
總結(jié)
以上是生活随笔為你收集整理的mybatis的工作原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flex的12个属性
- 下一篇: IT需求过程管理