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內部方法
(未完待整理)