本文本示例开发环境vs 2008 beta2,开发语言C#
使用Nhibernate的项目包含以下几个部分:
l Nhibernate配置 这里包括数据库类型,驱动,连接字符串,Nhibernate输出等设置,可以写在App.config、Web.config中,或hibernate.cfg.xml中,或指定名称的xml文件中,或程序集的资源中,或直接代码中指定。本文示例采用应用程序配置(app.config/web.config)
l 持久类 就是hibernate返回的对象类型,使用属性存放数据。
l 映射文件 将持久类各数据进行关联的文件,文件格式为XML。可以单独存放,也可以作为资源编译到程序集中。
l 数据库 本文使用Access数据库
l 应用程序 使用Session,查找数据,更新保存数据等。
下边就以这几个部分来创建一个简单的窗体应用程序
配置
打开App.config(如果没有请自行添加)并在<configuration></configuration>之间添加Nhibernate的配置信息:
<configSections>
<section
name="hibernate-configuration"
type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"
/>
</configSections>
<!-- Add this element -->
<hibernate-configurationxmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<propertyname="hibernate.dialect">NHibernate.JetDriver.JetDialect,NHibernate.JetDriver</property>
<propertyname="hibernate.connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<propertyname="hibernate.connection.connection_string">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;Persist Security Info=True</property>
<propertyname="connection.driver_class">NHibernate.JetDriver.JetDriver,NHibernate.JetDriver</property>
<propertyname="show_sql">false</property>
<mappingassembly="QuickStart" />
</session-factory>
</hibernate-configuration>
添加持久类
这里延用hibernate文档里的示例,创建一个Cat.cs。
namespace QuickStart
{
public class Cat
{
public Cat()
{
}
public virtual string Id
{
get;
set;
}
public virtual string Name
{
get;
set;
}
public virtual char Sex
{
get;
set;
}
public virtual float Weight
{
get;
set;
}
}
}
添加Cat的映射文件
创建文件Cat.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="QuickStart" assembly="QuickStart">
<class name="Cat" table="Cat">
<!-- A 32 hex character is our surrogate key. It's automatically
generated by NHibernate with the UUID pattern. -->
<id name="Id">
<column name="CatId" sql-type="char(32)" not-null="true"/>
<generator class="uuid.hex" />
</id>
<!-- A cat has to have a name, but it shouldn' be too long. -->
<property name="Name">
<column name="Name" length="16" not-null="true" />
</property>
<property name="Sex" />
<property name="Weight" />
</class>
</hibernate-mapping>
创建Access数据库
数据库为2003版,文件名db2.mdb,为方便调试及部署,请db2.mdb包含在项目中。并创建表Cat,表定义如下:
列 |
类型 |
长度 |
必填字段 |
主键 |
Unicode 压缩 |
CatId |
文本 |
32 |
是 |
是 |
|
Name |
文本 |
16 |
是 |
是 |
|
Sex |
文本 |
1 |
是 |
||
Weight |
数字 |
单精度型 |
创建一个窗体应用程序
在Form1左上角加上两个按钮,button1和button2,button1的Click事件是添加一条新的数据,代码如下:
private void button1_Click(object sender, EventArgs e)
{
ISession session = NHibernateHelper.GetSession();
ITransaction tx = session.BeginTransaction();
Cat princess = new Cat();
princess.Name = "Princess";
princess.Sex = 'F';
princess.Weight = 7.4f;
session.Save(princess);
tx.Commit();
}
Button2的Click事件显示数据库中所有数据,代码如下:
private void button2_Click(object sender, EventArgs e)
{
ISession session = NHibernateHelper.GetSession();
ITransaction tx = session.BeginTransaction();
IQuery query = session.CreateQuery("from Cat c where c.Sex = :sex");
query.SetCharacter("sex", 'F');
dataGridView1.DataSource = query.List<Cat>();
tx.Commit();
}
最后运行按F5运行项目进行测试。正确运行结果为:启动后按一下button2,在按了button1后,再按button2,如果看到多出来一条数据,则程序正确运行。