DAO設(shè)計(jì)模式解讀課件_第1頁(yè)
DAO設(shè)計(jì)模式解讀課件_第2頁(yè)
DAO設(shè)計(jì)模式解讀課件_第3頁(yè)
DAO設(shè)計(jì)模式解讀課件_第4頁(yè)
DAO設(shè)計(jì)模式解讀課件_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、DAO設(shè)計(jì)模式本章將介紹什么是DAO,以及使用DAO設(shè)計(jì)模式的優(yōu)點(diǎn)。還將介紹如何設(shè)計(jì)數(shù)據(jù)庫(kù)連接類、VO類、DAO接口、DAO實(shí)現(xiàn)類以及DAO工廠類。通過(guò)本章的學(xué)習(xí),讀者應(yīng)該能夠完成如下幾個(gè)目標(biāo)。 了解什么是DAO設(shè)計(jì)模式以及其優(yōu)點(diǎn) 熟練掌握如何定義數(shù)據(jù)庫(kù)連接類 熟練掌握如何定義VO類 熟練掌握如何定義DAO接口、DAO類以及DAO工廠類 熟練掌握如何使用DAO實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作1 DAO簡(jiǎn)介1.1 DAO設(shè)計(jì)模式定義 1)DAO的全稱是(Data Access Object),數(shù)據(jù)訪問對(duì)象。 2)使用DAO設(shè)計(jì)模式:來(lái)封裝數(shù)據(jù)庫(kù)持久層的所有操作。使得底層的數(shù)據(jù)邏輯和高層的業(yè)務(wù)邏輯相分離,達(dá)到解耦合

2、的目的。1.2 DAO模式的應(yīng)用背景 很多的J2EE應(yīng)用程序需要使用持久性數(shù)據(jù)(數(shù)據(jù)庫(kù)、文件等)。不同的程序,持久性存儲(chǔ)是各不相同的,并且用來(lái)訪問這些不同的持久性存儲(chǔ)機(jī)制的API也有很大的不同。假如應(yīng)用程序要在不同的持久性存儲(chǔ)間遷移,這些訪問特定持久存儲(chǔ)層的代碼將面臨重寫。1 DAO簡(jiǎn)介業(yè)務(wù)對(duì)象只應(yīng)該關(guān)注業(yè)務(wù)邏輯,不應(yīng)該關(guān)心數(shù)據(jù)存取的細(xì)節(jié)。數(shù)據(jù)訪問對(duì)象必須實(shí)現(xiàn)特定的持久化策略(如,基于JDBC或Hibernate的持久化邏輯)因此就抽出來(lái)了DAO層,作為數(shù)據(jù)源層,而之上的Domain Model(領(lǐng)域模型)層與之通訊而已,如果將那些實(shí)現(xiàn)了數(shù)據(jù)訪問操作的所有細(xì)節(jié)都放入高層Domain model

3、的話,系統(tǒng)的結(jié)構(gòu)一定層次上來(lái)說(shuō)就變得有些混亂。低級(jí)別的數(shù)據(jù)訪問邏輯與高級(jí)別的業(yè)務(wù)邏輯分離,用一個(gè)DAO接口隱藏持久化操作的細(xì)節(jié),這樣使用的最終目的就是讓業(yè)務(wù)對(duì)象無(wú)需知道底層的持久化技術(shù)知識(shí),這是標(biāo)準(zhǔn) j2ee 設(shè)計(jì)模式之一1 DAO簡(jiǎn)介1.3 利用DAO設(shè)計(jì)模式的解決方案 使用數(shù)據(jù)訪問對(duì)象(DAO)模式來(lái)抽象和封裝所有對(duì)數(shù)據(jù)源的訪問。DAO治理著與數(shù)據(jù)源的連接以便檢索和存儲(chǔ)數(shù)據(jù)。DAO實(shí)現(xiàn)了用來(lái)操作數(shù)據(jù)源的訪問機(jī)制。數(shù)據(jù)源可以是RDBMS,LDAP,File等。 依靠于DAO的業(yè)務(wù)組件為其客戶端使用DAO提供更簡(jiǎn)單的接口。DAO完全向客戶端隱藏了數(shù)據(jù)源實(shí)現(xiàn)細(xì)節(jié)。由于當(dāng)?shù)蛯訑?shù)據(jù)源實(shí)現(xiàn)變化時(shí),DA

4、O向客戶端提供的接口不會(huì)變化,所有該模式答應(yīng)DAO調(diào)整到不同的存儲(chǔ)模式,而不會(huì)影響其客戶端或者業(yè)務(wù)組件。重要的是,DAO充當(dāng)組件和數(shù)據(jù)源之間的適配器。1 DAO簡(jiǎn)介1.4 DAO模式中各種關(guān)系的類圖1 DAO簡(jiǎn)介1.4 參與者和職責(zé) 1)BusinessObject(業(yè)務(wù)對(duì)象) 代表數(shù)據(jù)客戶端。正是該對(duì)象需要訪問數(shù)據(jù)源以獲取和存儲(chǔ)數(shù)據(jù)。 2)DataAccessObject(數(shù)據(jù)訪問對(duì)象) 是該模式的主要對(duì)象。DataAccessObject抽取該BusinessObject的低層數(shù)據(jù)訪問實(shí)現(xiàn),以保證對(duì)數(shù)據(jù)源的透明訪問。BusinessObject也可以把數(shù)據(jù)加載和存儲(chǔ)操作委托給DataAcc

5、essObject。 1 DAO簡(jiǎn)介3)DataSource(數(shù)據(jù)源) 代表數(shù)據(jù)源實(shí)現(xiàn)。數(shù)據(jù)源可以是各RDBMSR數(shù)據(jù)庫(kù),OODBMS,xml文件等等。4)valueObject(值對(duì)象) 代表用做數(shù)據(jù)攜帶著的值對(duì)象。DataAccessObject可以使用值對(duì)象來(lái)把數(shù)據(jù)返回給客戶端。DataAccessObject也許會(huì)接受來(lái)自于客戶端的數(shù)據(jù),其中這些用于更新數(shù)據(jù)源的數(shù)據(jù)存放于值對(duì)象中來(lái)傳遞。2 DAO組成2.1 一個(gè)典型的DAO實(shí)現(xiàn)有如下的組件一個(gè)DAO接口;一個(gè)實(shí)現(xiàn)了DAO接口的具體類一個(gè)DAO工程類數(shù)據(jù)傳輸對(duì)象(有時(shí)稱為值對(duì)象)2.2 舉例:以維護(hù)一個(gè)客戶信息為例,具體的組件如下所示:

6、1)CustomerDao 接口;2)Customer值對(duì)象(VO); 3) CustomerDaoImpl(接口的具體實(shí)現(xiàn)類); 4)CustomerFactory(工程類,實(shí)例化用);5)DBConnection數(shù)據(jù)庫(kù)連接類3 DAO各部分詳解 DAO包括五個(gè)重要的部分,分別是數(shù)據(jù)庫(kù)連接類、VO類、DAO接口、DAO實(shí)現(xiàn)類以及DAO工廠類,下面將對(duì)各部分進(jìn)行詳細(xì)的介紹。3.1 數(shù)據(jù)庫(kù)連接類 數(shù)據(jù)庫(kù)連接類的主要功能是連接數(shù)據(jù)庫(kù)并獲得連接對(duì)象,以及關(guān)閉數(shù)據(jù)庫(kù)。通過(guò)數(shù)據(jù)庫(kù)連接類可以大大的簡(jiǎn)便開發(fā),在需要進(jìn)行數(shù)據(jù)庫(kù)連接時(shí),只需創(chuàng)建該類的實(shí)例,并調(diào)用其中的方法就可以獲得數(shù)據(jù)庫(kù)連接對(duì)象和關(guān)閉數(shù)據(jù)庫(kù),不

7、必再進(jìn)行重復(fù)操作。3.2 VO類 VO類是一個(gè)包含屬性和表中字段完全對(duì)應(yīng)的類。并在該類中提供setter和getter方法來(lái)設(shè)置并獲得該類中的屬性。3.3 DAO接口 DAO接口中定義了所有的用戶的操作,如添加記錄、刪除記錄以及查詢記錄等。不過(guò)因?yàn)槭墙涌?,所以僅僅是定義,需要子類來(lái)實(shí)現(xiàn)。3.4 DAO實(shí)現(xiàn)類 DAO實(shí)現(xiàn)類實(shí)現(xiàn)了DAO接口,并實(shí)現(xiàn)了DAO接口中定義的所有方法。在DAO實(shí)現(xiàn)中通過(guò)連接數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)庫(kù)操作。3.5 DAO工廠類 在沒有DAO工廠類的情況下,必須通過(guò)創(chuàng)建DAO實(shí)現(xiàn)類的實(shí)例才能完成數(shù)據(jù)庫(kù)操作。這時(shí)就必須知道具體的子類,對(duì)于后期的修改非常不便。如后期需要?jiǎng)?chuàng)建一個(gè)操作Orac

8、al的DAO實(shí)現(xiàn)類,這時(shí)就必須修改所有的使用DAO實(shí)現(xiàn)類的代碼。 使用DAO工廠類可以很好的解決后期修改的問題,可以通過(guò)該DAO工廠類的一個(gè)靜態(tài)方法來(lái)獲得DAO實(shí)現(xiàn)類實(shí)例。這時(shí)如果需要替換DAO實(shí)現(xiàn)類,只需修改該DAO工廠類中的方法代碼,而不必修改所有的操作數(shù)據(jù)庫(kù)代碼。.4 DAO模式普通寫法(步驟)第一步:封裝好類對(duì)象 public class Users private String userName=; private String passWord=; public Users(String userName,String passWord) this.userName=userNam

9、e; this.passWord=passWord; public String getPassWord() return passWord; public void setPassWord(String passWord) this.passWord = passWord; public String getUserName() return userName; public void setUserName(String userName) this.userName = userName; .4 DAO模式普通寫法(步驟)第二步:寫類對(duì)象所對(duì)應(yīng)的DAO接口 1.此接口規(guī)定各種業(yè)務(wù)邏輯方法

10、 例如: package com.sk.dao; import com.sk.object.Users; public interface UserDAO public Users getUser(String userName); 第三步:寫此DAO接口所對(duì)應(yīng)的各種(基于數(shù)據(jù)庫(kù)、文本。)實(shí)現(xiàn)類,比如: 1.此類為單態(tài)類(構(gòu)造函數(shù)私有,通過(guò)方法返回此類的實(shí)例) 例如: private UserDAOImp()/私有構(gòu)造 public static UserDAOImp getUserDaoImp() return new UserDAOImp(); /通過(guò)此方法得到UserDAOImp的實(shí)例

11、2.此類實(shí)現(xiàn)了db操作 public class UserDAOImp implements UserDAO private Connection conn=null; private PreparedStatement ps=null; private String url=jdbc:odbc:users;databaseName=users;user=sa;password=; private String sql=; private ResultSet rs=null; private Connection getConnection() throws ClassNotFoundExce

12、ption, SQLException Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); conn=DriverManager.getConnection(url); return conn; public Users getUser(String userName) this.getConnection(); sql=select username,password from users where username=?; ps=conn.prepareStatement(sql); ps.setString(1, userName); rs=ps.e

13、xecuteQuery(); if(rs.next() return new Users(rs.getString(username), rs.getString(password); 第四步:寫工廠(制造dao接口實(shí)現(xiàn)的靜態(tài)方法,既是寫制造上面第三步類的工廠) 1.public static UserDAO getUserDAO() return UserDAOImp.getUserDaoImp(); 例如: public class DAOFactory public static UserDAO getUserDAO() return UserDAOImp.getUserDaoImp(); 第五步:寫service類(業(yè)務(wù)邏輯操作) 例如:public class UserDAOService public Users checkLogin(String userName,String passWord) UserDAO userDAO=DAOFactory.getUserDAO(); Users user= userDAO.getUser(userName); if(user!=null) if(user.getPassWord().equals(pas

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論