Nhibernate源碼分析-ISession部分

ISession的實例主要用於數據的增刪改查操做,本篇就詳細記錄Session部分的實現。函數

Session的繼承結構:設計

從SessionImpl 提及,如圖1繼承層次繼承

圖1接口

ISerializable, IDeserializationCallback這兩個接口是序列化和反序列化的接口,此處只關心AbstractSessionImpl抽象類和IEventSource接口io

IEventSource接口,繼承自ISessionImplementor和ISessionobject

AbstractSessionImpl抽象類,繼承自ISessionImplementor,主要實現了CreateQuery,CreateSQL等方法。date

SessionImpl 主要實現了Load,Get,Save,SaveOrUpdate,CreateSQLQuery等方法。List

接下來是SessionFactory的實現序列化

ISessionFactory實例由Configration 實例建立,密封的子類爲SessionFactoryImpl,其繼承層次如圖2,圖3方法

圖2

圖3

咱們主要使用ISessionFactory中的OpenSession()及其重載方法,該方法會建立ISession實例

SessionFactoryImpl 密封類實現了ISessionFactory接口中的方法

OpenSession方法主要使用Settings 類型, SessionImpl類型,IInterceptor接口

接下來看增刪改查的幾個方法實現:

Load<T>(object id):該方法涉及到的接口和類型比較多

用id,實體名稱初始化LoadEvent實例,而後調用FireLoad方法,該函數中設計到的接口爲ILoadEventListener,調用該接口的OnLoad函數填充LoadEvent實例。實現ILoadEventListener的類型爲DefaultLoadEventListener。

Get<T>(object id):該函數和Load內部實現是相同的都是調用的FireLoad方法

上面說到的加載一個持久化實例的實現都不是很複雜。

而後分析數據更新的實現:

Update方法,調用FireUpdate內部方法

(未完待整理)

相關文章
相關標籤/搜索