複製鏈接
請複製以下鏈接發送給好友

數據訪問層

鎖定
數據庫訪問層(Data Access Layer)又稱為DAL層,有時候也稱為是持久層,其功能主要是負責數據庫的訪問。簡單地説就是實現對數據表的Select(查詢)、Insert(插入)、Update(更新)、Delete(刪除)等操作。如果要加入ORM的思想,就會包括對象和數據表之間的映射,以及對象實體的持久化操作。
中文名
數據訪問層
外文名
Data Access Layer
結構層數
3層
別    名
DAL層
定    義
主要是負責數據庫的訪問
學    科
計算機技術

目錄

數據訪問層基本介紹

在企業級應用中,很少有不與數據庫打交道的。只要是用到數據庫,就有把業務數據持久化到數據庫的需求。
在項目實際開發過程,有的直接採用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(); //打開數據庫連接
SqlDataAdapter 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] 
參考資料
  • 1.    羅果著,企業級Java EE 架構設計精深實踐,清華大學出版社,2016.06,第135頁
  • 2.    蘆麗萍編著,網絡數據庫系統開發技術應用,南開大學出版社,2016.03,114-116