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