- 作者:zhaozj
- 发表时间:2020-12-23 11:02
- 来源:未知
一、概述
O/R Mapping全称Object Relational Mapping,就是对象关系映射。把对表直接进行的操作,变成对持久化类的属性和方法的直接操作。
很多的项目是基于数据库的开发,程序中要大量进行表的增、删、改、查询的工作。
例如下面一段C#代码,从数据库CustomerDemo取表Customer数据:
string ConnectionString = "data source=WILLIAM;persist security info=True;initial catalog=CustomerDemo;user id=sa;password=sasa";
SqlConnection theSqlConnection = new SqlConnection(ConnectionString);
string query = "select CustomerName from Customer where CustomerID=1";
SqlDataAdapter theSqlDataAdapter = new SqlDataAdapter();
theSqlDataAdapter.SelectCommand = new SqlCommand(query, theSqlConnection);
DataSet customerDataSet = new DataSet();
theSqlDataAdapter.Fill(customerDataSet);
DataTable cusomerDataTable = new DataTable();
cusomerDataTable = customerDataSet.Tables[0];
//判断数据集是否为空
if (cusomerDataTable.Rows.Count>0)
{
DataRow dr = cusomerDataTable.Rows[0];
//不进行取数据的是否为空的判断,很容易留下隐患
if (! dr.IsNull("CustomerName"))
{
txtCustomerName.Text = dr["CustomerName"].ToString();
}
}
theSqlConnection.Close();
如果用O/R Mapping对表封装成持久化类,读取表的数据就变为访问持久化类的属性。例如:
//以下只是一段伪代码的模拟,不同的O/R Mapping技术封装,代码的写法会有不同。
//建立数据连接Connection
Connection conn = DataSource.GetConnection();
//建立可持久化类工厂
SessionFactory theSessionFactory = ConfigurationFactory.BuildSessionFactory(conn);
//实例化一个Customer,并取CustomerID=1的对象
Customer theCustomer = (Customer)theSessionFactory.CreateObject(typeof(Customer),”1”);
//取对象的属性进行赋值
txtCustomerName.Text = theCustomer.Name;
conn.Close();
以上的代码相当的简洁,对表的一些常用的操作,都封装在类里面。O/R Mapping对整个项目的开发都有相当的益处:
1、 程序员
(1) 一般的数据库应用的项目,无非是大量的表、字段的select、insert、delete、edit的操作。这些操作没有多大的技术难度,就是耗时间去实现,还要小心谨慎处理,到处用if语句来进行的判断。把大量重复劳动进行类的封装,提高开发质量和效率是显而易见的。