Mybatis源碼學習之路一

一、前言

  1. 工作三年了,各種開發框架也用的十分熟練。現在學習的時候漸漸也不滿足使用上,所以開始涉獵源碼,也是希望自己的技術能力能更近一步,自己想法也是從Mybatis框架源碼開始,在博客上記錄下,和大家一步進步

二、ORM框架

  1. 傳統JDBC常見的步驟:
    1. 註冊數據庫驅動類
    2. 通過DriverManager打開數據庫連接
    3. 通過連接創建相應的Statement
    4. 通過Statement執行相應的SQL語句,若是查詢語句則得到ResultSet
    5. 通過ResultSet讀取數據,並轉化爲相應的JavaBean
    6. 關閉資源
  2. 上述操作中我們關注點只有SQL語句的執行,其它操作重複且繁雜。早期的時候爲了提高代碼的可複用性,通常將重複性代碼封裝到一個類似DBUtils的工具類中。但是關係模型到對象模型的轉換依然複雜,所以ORM框架應運而生
  3. ORM的提供的功能:
    1. 根據映射配置文件,實現對象模型和關係模型之間的映射,同時也屏蔽了上述重複代碼
  4. Hibernate:
    1. 通過hbm.xml文件維護對象模型和關係模型之間的映射。通過該映射,開發人員可以通過看待Java的角度去看待數據庫中的數據行
    2. 優點:
      1. HIbernate還能夠屏蔽數據庫的底層差異,以至於可以切換不同的數據庫而程序不受影響。
      2. API沒有侵入性,業務邏輯不需要繼承Hibernate的任何接口
    3. 缺點
      1. 並不是數據庫中所有的概念在面向對象的世界中都能找到對應關係,比如索引、存儲過程以及函數等
      2. SQL優化比較困難
         
  5. Spring JDBC:
    1. 並不算一個ORM框架,僅僅使用模板方法的設計模式對原生JDBC進行了一層薄封裝,它沒有映射文件、緩存等概念,而是直接執行原生SQL語句
    2. 優點:
      1. 屏蔽了數據庫連接創建等重複性代碼,提升了開發效率
      2. 提供了很多template類,可以將對象中的屬性映射爲SQL中的參數
      3. 提供了很多ORM化的callback,可以將ResultSet轉化成相應的對象列表
      4. Spring JDBC本身就位於核心包中,和Spring框架無縫連接
  6. Mybatis:
    1. Mybatis是對JDBC的一層封裝,幫助開發人員屏蔽了底層代碼的重複性
    2. 優點:
      1. 相比於Hibernate更加輕量級,可控性也更高
      2. 可以進行SQL優化

三、Mybatis整體架構簡述

  1. MyBatis整體架構分爲三層:接口層、核心處理層、基礎支持層
  2. 接口層:
    1. 核心是SqlSession接口,它暴露了Mybatis提供給開發人員的API,接口層在接收到相應的請求時,會調用核心處理層的相應模塊來完成具體操作
  3. 核心處理層:
    1. 核心處理層實現了Mybatis核心處理流程,其中包括Mybatis的初始化以及完成一次數據庫操作涉及的全部流程
    2. 組成:
      1. 配置解析,解析配置文件如核心配置文件解析成功後會生成Configuration對象
      2. SQL解析,用於解析動態SQL
      3. SQL執行,用於執行SQL,其涉及到多個模塊Executor、ParameterHandler、StatementHandler以及ResultSetHandler
      4. 插件,可以通過添加自定義插件的方式對Mybatis進行擴展
         
  4. 基礎支持層:
    1. 爲核心處理層提供了良好的支持,並提供了可觀的代碼複用
    2. 組成:
      1. 反射模塊,對JDK反射的封裝
      2. 類型轉換模塊,別名機制是類型轉換模塊中重要機制,實現了JDBC類型和JAVA類型之間的轉換
      3. 日誌模塊,用於日誌記錄
      4. 資源加載模塊,對類加載器的封裝
      5. 解析器模塊,一是對XPath的封裝,爲初始化加載解析配置文件提供支持。二是爲處理動態SQL語句中的佔位符提供支持
      6. 數據源模塊,mybatis提供了相應的數據源實現,也提供了與第三方數據源集成的接口
      7. 事務管理模塊,對數據庫中的事務進行了抽象,其自身提供了相應的事務接口和簡單實現。
      8. 緩存模塊,提供了一級緩存二級緩存
      9. binding模塊,將用戶自定義的mapper接口與映射配置文件關聯起來
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章