NHibernate主要接口

一、接口简介

ISession
ISession是面向用户的主要接口,主要用于对象持久化,数据加载等操作,支持数据库事务,它隐藏了NHB内部复杂的实现细节,ISession由ISessionFactory创建。

 

ISessionFactory
ISessionFactory是NHB内部的核心类,它维护到持久机制(数据库)的连接并对它们进行管理,同时还会保存所有持久对象的映射信息。
ISessionFactory由Configuration创建,因为创建ISessionFactory的开销非常大(需要加载映射信息),所以这个对象一般使用Singleton(单例)模式。

 

ITransaction
ITransaction是NHB的事务处理接口,它只是简单的封装了底层的数据库事务。
事务必须由ISession来启动。

 

ICriteria
ICriteria是Expression(表达式)数据加载接口,Expression是一个关系表达式组合,通过它能产生SQL语句的Where部分, 用户需要通过ISession来间接调用它。

 

IQuery
IQuery是HQL数据加载接口,HQL(Hibernate Query Language)是NHB专用的面向对象的数据查询语言,它与数据库的SQL有些类似,但功能更强大!同ICriteria一样,也需要通过ISession来间接调用它。

 

二、ISessionFactory接口

该接口与数据库连接、数据库事务等进行交互,还存储着与所有持久对象关联的持久化对象。持久化类是持久化的关键,它实现基本的CRUD操作。

 

当用户需要持久操作时,由会话工厂创建一个会话供用户进行持久操作。

会话工厂由ISessionFactory接口实现,由Configuration的BuildSessionFactory方法创建,会话工厂应该使用Singleton模式。它是Session的工厂,是ConnectionProvider的客户。可以持有一个可选的(第二级)数据缓存,可以在进程级别或集群级别保存的可以在事物中重用的数据。如果要访问多个数据库,应建立多个会话工厂。

ISessionFactory接口并没有提供与连接对象相关的操作,这些操作由ISessionFactoryImplementor类实现。ISessionFactoryImplementor继承自ISessionFactory,而会话工厂的实现类SessionFactoryImpl实现了这两个接口。

 

三、ICriteria接口

该接口用于操作表达式和排序字段,由CriteriaImpl类实现。此类加有Internal修饰,因此在程序中无法直接构造,必须通过ISession.CreateCriteria(type)来获得。

ICriteria接口的一些方法:
SetMaxResults:设置返回的最大结果数,可用于分页;
SetFirstResult:设置首个对象返回的位置,可用于分页;
SetTimeout:设置操作的超时值,此值将传递给IDbCommand对象;
Add:加入条件表达式(Expression对象),此方法可多次调用以组合多个条件;
AddOrder:加入排序的字段(Order对象);
List:返回满足条件的对象集合。

 

其中Expression是一个abstract(抽象)类,它通过一组static方法实现Factory Method(工厂方法)模式,这些static方法返回的都是Expression类的子类,下面列出一些常用的:

Eq:返回EqExpression,这是一个相等判断的表达式;
Like:返回LikeExpression,这是一个like判断的表达式;
Gt:返回GtExpression,这是一个大于判断的表达式;
And:返回AndExpression,这是两个表达式And操作后的表达式;
Or:返回OrExpression,这是两个表达式Or操作后的表达式;

 

Criteria数据加载的不足:
1. 当使用SetFirstResult和SetMaxResults限制返回的对象数时,无法得知对象的总数;
2. 当前版本不支持关联查询(hibernate好像可以);

 

四、IQuery接口

该接口用来设置查询语句、参数等,实现类为QueryImpl,不能在NHB程序集外直接创建,只能通过session的CreateQuery来取得一个IQuery接口。HQL是一个十分强大的面向对象的查询语言,不需要使用实际的表名和列名来查询数据,而改用类名和属性。有两种方式来执行HQL数据加载,一种是直接使用ISessionFind方法,另一种是使用IQuery接口。
IQuery
最终还是会调用ISessionFind方法。

IQuery接口的一些方法:
SetMaxResults:设置返回的最大结果数,可用于分页;
SetFirstResult:设置首个对象返回的位置,可用于分页;
SetTimeout:设置操作的超时值,此值将传递给IDbCommand对象;
Enumerable:返回查询的枚举对象;
List:返回查询的对象集合;
SetParameter:设置查询语句中参数的值和类型。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值