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来间接调用它。
下面是配置文件和映射文件的详解:
NHibernate是通过映射文件,将数据表中的记录转化为对象,将记录中的字段转化为对象的属性,所以说映射文件是O/R映射中至关重要的一个环节,下面就对其进行详细的讲解说明。
1 <?xml version="1.0" ?>
映射文件中不仅描述了NHibernate在运行时需要使用到的元素类型和属性,同时还包含了额外的元素属性,如被映射字段是否允许为空等。
Schema
在NHibernate中所使用的所有映射文件均使用nhibernate-mapping-2.0 schema。NHibernate会把这种Schema作为嵌入资源使用。
Hibernate-mapping
1 <hibernate-mapping
这个元素有六个可选属性。
Schema(可选) :数据表结构名称;
(1) Default-cascade(可选,默认值为none) :数据表级联类型;
(2) Auto-import(可选,默认值true) :指示出是否可以在查询语句中不指定类名;
(3) Default-access(可选,默认值为”property”):指示出NHibernate用于访问字段的策略;
(4) Assemble(可选):如果在引用实体类时没有指明类名前缀,则用此选项值作为默认的类名前缀;
(5) Namespace(可选):指示同名称空间;
如果你有两个同名的被持久化的对象(classname相同),则必须将”auto-import” 选项值设为false,否则当你访问这个对象时NHibernate会抛出一个异常。
Class
1 <class
(1) name:持久类在.Net中的类型的的全名及其所在程序集;
(2) table:数据库中的数据表名称;
(3) discriminator-value(可选,默认值为类名):用于区分单独的子集,使用与多态形式;
(4) mutable(可选,默认值为true):指定类实例是否易变;
(5) schema(可选):重新指定hibernate-mapping中的Schema选项值;
(6) proxy(可选):指定用于实现惰性初始的接口,如果所有属性都被声明为Virtual,则可以将类名指定给此选项;
(7) dynamic-update(可选,默认值false):指示出NHibernate在运行时产生的Update SQL语句是否仅包含被修改了的字段;
(8) dynamic-insert:(可选,默认值false):指示出NHibernate在运行时产生的Insert SQL语句是否仅包含被值不为Null的字段;
(9) polymorphism(可选,默认值implict):指示出是否需要有确指明查询是否使用多态性;
(10) where(可选):指定Where SQL语句可以获取这个类类型的对象;
(11) persister(可选):指定用户自定义的IClassPersister;
(12) lazy(可选):将此项设为true等同与将它自己的类名赋予给proxy选项。
Id
被映射的类必须声明一个Id与数据表中的主键相对应。Id其实也是被映射的类的一个属性,与使用Proerpty声明的属性不同的是ID属性值必须是唯一的,通过ID可以将对象转化为数据表中唯一的一条记录,同样也可以将数据表中的记录转化为对象。
(1) name(可选):属性的名称;
(2) type(可选):属性的类型;
(3) column(可选,默认值和属性名称相同):数据表中的主键字段名称,如果用户定义的属性名称和此字段名称相同,则此选项可忽略不写;
(4) unsaved-value(可选,默认值为null):为属性指定默认值,当用户创建一个新的实例时,会将该选 项值做为属性默认值;
(5) access(可选,默认为”property”):NHibernate对属性的访问策略;
Generator
此节指定了用于为该持久类实例产生ID属性值的.Net数据类型。如果需要一些参数对产生类实例ID属性值的数据类型进行配置或是初始化工作,可以使用”Param” 子节对其进行定义。
1 <id name="Id" type="Int64" column="uid" unsaved-value="0">
所有的ID属性值产生器均实现了Nhibernate.Id.IdentifierGenerator接口。这是一个很简单的接口,一些应用程序会有他们自已专门的ID属性值产生器。尽量这样,NHibernate仍提供了一些内置的ID属性值产生器,下面对其简单说明。
Identity
支持DB2,MySQL,MS SQL Server,Sybase和HpersonicSQL数据库中的自增字段。会产生类型为Int64,Int32或是Int16的整型数值。
Sequence
使用DB2, PostgreSQL, Oracle数据库中的序列。会产生类型为Int64,Int32或是Int16的整型数值。
Hilo
使用Hi/lo算法有效的产生一个类型为Int64,Int32或是Int16的整型数值。
Guid
使用.Net平台下的new System.Guid产生一个唯一的序列值。
Assigned
让应用程序在将此类持久化到数据库之前,对ID属性指定一个值。
Property
利用Property可以将数据表中的字段映射为持久类的属性。
1 <property
(1) name:要映射成的属性名称;
(2) column(可选,默认和name值相同):数据表中的字段名称;
(3) type(可选):指定属性类型;
(4) update(可选,默认值为true):是否将此属性包含到NHibernate产生的Update SQL子句中;
(5) insert(可选,默认值为true):是否将此属性包含到NHibernate产生的Insert SQL子句中;
(6) formula(可选):用于计算该属性值的一个SQL表达式。计算属性没有在数据表中没有相应的字段与其对应;
(7) access(可选,默认为”property”):NHibernate对属性的访问策略;