一.O/R Mapping 概论
工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码
针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(BE层),数据访问层(DAL),这样同样会导致以上的各层BLL,UI等等的修改,长久的下去,只会造成项目的噩梦。
在软件高速发展的今天,已经有很多的人在为这个问题而努力了,其中最有成果的就是java社区,因为java社区的开源精神,促使了一个新的概念的诞生。
O/R Mapping的思想。
二.什么是O/R Mapping?
O:object
R:relationship
Mapping:映射
将关系型数据库与我们的面向对象联系起来,
将表与类(实体类,javabean)联系起来
我们的程序直接与对象打交道,而不去关心是什么类型的数据库以及是不是数据库了。
三.为什么要O/R Mapping?
考虑我们原先的JDBC或者ADO.NET,我们的代码是这个样子的:
Using System.Data.SqlClient;
SqlConnection conn = new SqlConnection(“server=.;uid=sa;pwd=sa;database=dbtest”);
SqlCommand cmd = conn.CreateCommand();
cmd,.CommandText = “select * from account”;
Con.Open();
SqlDataReader sr = cmd.ExecuteQuery();
While(sr.Read())
{
//………这里是我们需要的代码,才是我们真正关心的代码
}
Conn.Close();
但是很烦琐,因为其中很多的代码都是与我们整个需求无关的。
我们只需要关心的是:获得的结果以及增加,修改,删除的结果。
所以我们要把数据库与面向对象的概念整和起来。
四.我们的需求
我们希望在编写代码的时候是这个样子的:
//实体类
Class User
{
string name;
int age;
……..
}
//DAL层代码
Class UserDAL
{
User u = new User();
u.Name = “Guilee”;
u.Age = 25;
u.Id = 1;
Add(u);//将新用户添加到数据库中
Update(u);//修改数据库的内容
Delete(u);//删除数据库的内容
}
五.Hibernate
六.NHibernate的基本使用
第三步:
使用NHibernate的配置文件
在配置文件中指定数据库的方式,连接数据库的方式
让NHibernate知道如何去使用连接数据库
第四步:
编写O/R Mapping的映射文件
让NHibernate知道如何去映射.NET与数据库之间的关系
最后使用强大的NHibernate来编写你的程序!
为了让NHibernate知道如何去连接数据库,所以你必须在我们.NET中的app.config或者web.config中去配置一下:
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
value="NHibernate.Connection.DriverConnectionProvider" />
value="NHibernate.Dialect.MsSql2000Dialect" />
value="NHibernate.Driver.SqlClientDriver" />
value="server=(local);uid=sa;pwd=sa;database=dbtest" />
制作一个持久化的类:
public class Account //注意必须将属性设置为virtual虚拟的
{
private int id;
virtual public int Id
{
get { return id; }
set { id = value; }
}
private string username;
virtual public string Username
{
get { return username; }
set { username = value; }
}
private string password;
virtual public string Password
{
get { return password; }
set { password = value; }
}
}
编写每个持久化类的配置
其中xmlns指定了使用NHibernate的版本,
class元素的name属性指定了持久化类的全名称,逗号隔开的是程序集的名称
table属性指定了对应的数据库中表名称
id元素是指定主键列名,name属性是指持久化类的属性名,column是表中列名
property元素是其他的每一列与持久化类的哪个属性对应
generator元素 中的class属性指定了是自动增长列
保存为Account.hbm.xml文件
使用NHibernate,你可以开始使用NHibernate来体验他们的强大之处了:)