第一次讀Hibernate源碼


 



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

首先,拿到一個框架,要先了解其基本功能,通讀(略讀)其API。
然后,通過其主要代碼或其在項目中的常應用的類為入口,進行追蹤。看看其實如何實現本功能的。同時,可在網上查找相關
文檔,了解其基本架構。
在對其常用功能的實現有一定認識以后,然后通視源碼,主要先從其工具類或實體類開始(因為易於理解,並且不像其他邏輯相關的類一樣較為復雜)。
在閱讀邏輯相關的類時,不僅要'見文知意',還要仔細閱讀注釋,如果有Log日志輸出,還可以借助日志輸出字符來理解(在應用中還可以借助控制台日志打印信息來追蹤程序執行過程)。沿着某項功能的實現為主線,跳躍式閱讀。
最后,查缺補漏,找出還未閱讀的代碼(如不想深入研究,就不必了)。

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


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

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


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

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

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

4.      org.hibernate.collection.* :Hibernate集合接口實現類:例如List(PersistentList),Set(PersistentSet),         Bag(PersistentBag)等等,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數據綁定

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM