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内部方法

(未完待整理)

相关文章
相关标签/搜索