ISession的实例主要用于数据的增删改查操作,本篇就详细记录Session部分的实现。
Session的继承结构:
从SessionImpl 说起,如图1继承层次
图1
ISerializable, IDeserializationCallback这两个接口是序列化和反序列化的接口,此处只关心AbstractSessionImpl抽象类和IEventSource接口
IEventSource接口,继承自ISessionImplementor和ISession
AbstractSessionImpl抽象类,继承自ISessionImplementor,主要实现了CreateQuery,CreateSQL等方法。
SessionImpl 主要实现了Load,Get,Save,SaveOrUpdate,CreateSQLQuery等方法。
接下来是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内部方法
(未完待整理)