求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

数据访问层查看源代码讨论查看历史

跳转至: 导航搜索
数据访问层
圖片來自优酷

电子与信息技术领域术语 数据库访问层(Data Access Layer)又称为DAL层,有时候也称为是持久层,其功能主要是负责数据库的访问。简单地说就是实现对数据表的Select(查询)、Insert(插入)、Update(更新)、Delete(删除)等操作。如果要加入ORM的思想,就会包括对象和数据表之间的映射,以及对象实体的持久化操作。

基本介绍

在企业级应用中,很少有不与数据库打交道的。只要是用到数据库,就有把业务数据持久化到数据库的需求。 在项目实际开发过程,有的直接采用JDBC技术进行数据库持久化操作,有的采用目前很好用的ORM框架来进行数据库持久化操作。

抽取数据库访问层的主要作用是进行隔离,把与数据库打交道的事情都放在数据访问层解决,在服务层则只要调用数据访问层就可以了,不必和具体的ORM层实现相耦合。

数据库访问层:又称为DAL层,有时候也称为是持久层,其功能主要是负责数据库的访问。简单地说就是实现对数据表的Select(查询)、Insert(插入)、Update(更新)、Delete(删除)等操作。如果要加入ORM的思想,就会包括对象和数据表之间的映射,以及对象实体的持久化操作。

讲到数据库访问层,不得不提下三层架构,通常会把应用系统划分为:表现层、业务逻辑层和数据库访问层。这样的设计目的是为了实现“高内聚低耦合”的设计思想。数据库访问层在三层架构中只负责数据存储与读取。业务逻辑层作为数据库访问层的上层,内部调用数据库访问层提供的方法,来完成数据的存储与读取。数据库访问层与底层数据库应该是独立的,好的数据库访问层方案是能够在不修改程序代码功能的基础之上实现不同类型数据库的动态切换。我们比较熟悉的做法就是通过XML配置文件来完成底层数据库的切换。目前很多流行的数据库访问层框架都是采用这种方式来实现数据库的动态切换。数据访问层能够将应用程序中的数据持久化到存储介质中,通常我们使用的数据库都是关系型的数据库,采用的数据模型都是对象模型,这就需要数据库访问层实现对象模型与关系模型直接的、互相的转换。 [1]

特点

三层结构为:

1.表示层(USL):主要表示WEB方式,也可以表示成WINFORM方式。如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

2.业务逻辑层(BLL):主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。如果说数据层是积木,那逻辑层就是对这些积木的搭建。

3.数据访问层(DAL):主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务

设计

数据访问层DataAccessLayer用于数据库数据的读写操作,该层只包含一个类文件Database.CS。在该类文件中需要创建一些方法以完成建立数据库连接、向数据库提交SQL语句并返回相应的操作结果等功能。

添加类文件

在DataAccessLayer文件夹下添加新项,在“选择新项”对话框中选择模板为“类”给类文件命名为 Database.CS,单击“添加”按钮。

引用命名空间

由于类的代码中要使用ADO.NET相关对象,需要引用以下命名空间:

using System.Data.SqlClient;

类文件结构

将Database类的定义代码放在命名空间MessageBoard.DataAccessLayer的定义中,付码结构如下:

namespace MessageBoard.DataAccessLayer

数据访问层
圖片來自优酷

{

public class Database

{

自定义方法()

{ }

}

}

在Database类中添加方法

(1)DBCon()方法

功能:返回SqlConnection对象的数据库连接参数,属于无参函数。代码如下:

public static SqlConnection DBCon()

{

SqlCormection conrl=new SqlConnection(); //创建连接对象

conn.ConnectionString=“seerver=;database=db_ExamOnline;user id=sa;pwd=123456”;//建立连接字符串

retum coma;//返回连接对象

}

也可以用以下方法直接返回数据库连接字符串:

public static SqlConnection DBCon()

{

return new SqlConnection(”server=.;database=db_Message;user id=sa;pwd=123456”);

}

(2)GetDataSet(String)方法

功能:接收传来的SQL语句,执行查询操作,返回查询结果集。该方法的参数为字符类型,代码如下:

public DataSet GetDataSet(String sql)//形参sql接收传来的SQL语句

{

SqlConnection conn=DBCon0;

//定义一个SqlConnection类对象并得到连接字符串

conn.Open(); //打开数据库连接

Sql[[DataAdapter] adapter = new SqlDataAdapter(sql,conn);

//定义一个SqlDataAdapter类对象,获取SQL命令和连接

DataSet dataset=new DataSet(); //定义一个DataSet类对象

adapter.Fill(dataset); //向数据库提交SQL语句,将查询结果放入dataset中

conn.Close(); //关闭数据库连接

return dataset; //返回查询结果数据集

}

(3)ExecuteSQL(String)方法

功能:接收传来的SQL语句,执行非查询操作,完成将留言信息写到数据库中的操作。该方法的参数为字符串 类型,代码如下:

public void ExecuteSQL([[string sql]) //形参sql接收传来的SQL语句

{

SqlConnection conn=DBCon();

//定义一个SqlConnection类对象并得到连接字符串

conn.Open(); //打开数据库连接

SqlCommand cmd=new SqlCommand(sql,coma);

//定义一个SqlDataCommand类对象,获取SQL命令和连接

cmd.ExecuteNonQuery(); //执行一个非查询命令

conn.Close(); //关闭数据库连接

} [2]

视频

数据测试:如何使用 Spring 测试数据访问层组件?

[1]

参考文献