第一次讀Hibernate源碼

 



今天抽空讀了下hibernate源碼,總結了幾條讀源碼的經驗,而且認識了hibernate的部分源碼結構。sql

首先,拿到一個框架,要先了解其基本功能,通讀(略讀)其API。
而後,經過其主要代碼或其在項目中的常應用的類爲入口,進行追蹤。看看其實如何實現本功能的。同時,可在網上查找相關
文檔,瞭解其基本架構。
在對其經常使用功能的實現有必定認識之後,而後通視源碼,主要先從其工具類或實體類開始(由於易於理解,而且不像其餘邏輯相關的類同樣較爲複雜)。
在閱讀邏輯相關的類時,不只要'見文知意',還要仔細閱讀註釋,若是有Log日誌輸出,還能夠藉助日誌輸出字符來理解(在應用中還能夠藉助控制檯日誌打印信息來追蹤程序執行過程)。沿着某項功能的實現爲主線,跳躍式閱讀。
最後,查缺補漏,找出還未閱讀的代碼(如不想深刻研究,就沒必要了)。數據庫

**在此發現了'解耦'的好處,不用把整個框架設計爲一體,所有互相依賴,好比Hibernate裏的一些工具類(如StringHelper類),這樣在修改重構時會減小代碼量。架構


今天只讀了configuration類和相關的部分類元源碼。
其中configuration類是Hibernate運行時的第一個類,他負責解析hibernate.cfg.xml,並做完成框架的初始化工做。app

下面是引用網上關於Hibernate各包的簡介。框架


1.      org.hibernate :該包的類基本上都是接口類和異常類ide

2.      org.hibernate.cache.* :cache的實現類工具

3.      org.hibernate.cfg.* :配置文件讀取類 測試

4.      org.hibernate.collection.* :Hibernate集合接口實現類:例如List(PersistentList),Set(PersistentSet),         Bag(PersistentBag)等等,Hibernate之因此要自行編寫集合接口實現類是爲了支持延遲加載。hibernate

5.      org.hibernate.connection.* :幾個數據庫鏈接池的Provider 設計

6.      org.hibernate.dialect.* :支持多種數據庫特性,每一個Dialect實現類表明一種數據庫,描述了該數據庫支持的數據類型和其它特色,例如是否有AutoIncrement,是否有Sequence,是否有分頁sql等等

7.      org.hibernate.eg.* :Hibernate文檔中用到的例子

8.      org.hibernate.engine.* :這個包的類做用比較散

9.      org.hibernate.hql.* :HQL的實現org.hibernate.id.* :ID生成器

10.    orghibernate.impl.* :最核心的包,一些重要接口的實現類,若是Session,SessionFactory,Query等  

11.    org.hibernate.jca.* :JCA支持,把Session包裝爲支持JCA的接口實現類

12.    org.hibernate.jmx.* :jmx的實現

13.    org.hibernate.loader.* :也是很核心的包,主要是生成sql語句的

14.    org..hibernate.lob.* :Blob和Clob支持

15.    org.hibernate.mapping.* :hbm文件的屬性實現

16.    org.hibernate.metadata.*:PO的Meta實現

17.    org.hibernate.odmg.*:ODMG是一個ORM標準,這個包是ODMG標準的實現類

18.    org.hibernate.persister.*:核心包,實現持久對象和表之間的映射

19.    org.hibernate.proxy.*:Proxy和Lazy Loading支持

20.    org.hibernate.ps.*:該包是PreparedStatment Cache

21.    org.hibernate.sql.*:生成JDBC sql語句的包

22.    org.hibernate.test.*:測試類,你能夠用junit來測試Hibernate

23.    org.hibernate.tool.hbm2ddl.*:用hbm配置文件生成DDL

24.    org.hibernate.transaction.*:Hibernate Transaction實現類

25.    org.hibernate.type.*:Hibernate中定義的持久對象的屬性的數據類型

26.    org.hibernate.util.*:一些工具類,做用比較散

27.    org.hibernate.xml.*:XML數據綁定