MyBatis理論總結


 

mybatis的架構

在這裏插入圖片描述

 

在這裏插入圖片描述
 

mybatis的2個核心對象:SqlSessionFactory、SqlSession

SqlSession封裝了jdbc,提供了大量的操作數據庫的方法。
SqlSession是線程不安全的,每一個線程都應該有自己的SqlSession實例,並且該實例不能被共享。

SqlSessionFactory用於創建SqlSession,SqlSessionFactory是線程安全的。

 

mybatis的執行過程

1、從配置文件中讀取mybatis配置

2、加載xml映射文件

3、創建會話工廠SqlSessionFactory

4、通過會話工廠創建SqlSession對象

5、創建Executor實例
mybatis底層定義了一個Executor接口來操作數據庫,可以根據SqlSession傳遞的參數動態生成需要執行的sql語句。mybatis給Executor接口提供了多種實現。

6、創建MappedStatement對象
Executor接口中操作數據庫的方法都有一個MappedStatement類型的參數,此參數封裝了映射信息,一個增刪改查元素對應一個MappedStatement對象,元素的id就是MappedStatement對象的id。

7、將輸入參數組裝到sql語句中

8、通過Executor實例執行sql語句

9、將結果集映射爲指定類型

 

mybatis、hibernate的比較

都是orm框架,orm Object Relational Mapping 對象關係映射,Object指的是java對象(po),Relational指的是關係數據庫中的數據。
 

  • hibernate是標準的orm框架,自動生成操作數據庫的方法、sql語句,編碼量少,開發效率高於mybatis;mybatis是半自動的orm框架,需要自己寫sql語句、操作數據庫的方法。

  • hibernate使用門檻高,需要掌握數據關係模型、複雜的hql;mybatis簡單易上手

  • hibernate自動生成了大量的sql語句、方法,很多都用不到、冗雜,死板、不好維護;mybatis可根據需求編寫sql語句、方法,支持動態sql,可自定義映射規則,支持存儲過程,靈活、好維護。

  • hibernate具有良好的數據庫無關性,移植性好,更換數據庫類型時,只需更改方言;mybatis不支持數據庫無關性。

  • hibernate對多表關聯查詢支持較差,更新操作需要發送整個po對象(所有字段),不支持儲存過程,不能進行sql優化來提高性能,適合場景簡單、對性能要求不高的項目;mybatis對關聯映射、多表查詢支持較好,可通過sql優化來提高性能(因爲是自己寫sql語句),複雜、對性能有要求的項目使用mybatis更合適。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章