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