Nhibernate源码分析-ISession部分

本文详细解析了Hibernate框架中Session接口的实现原理,包括Session的继承结构、SessionFactory的创建过程及核心方法的具体实现细节。

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

(未完待整理)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/2535181/blog/751621

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值