版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.dao 設(shè)計(jì)模式dao 設(shè)計(jì)模式簡(jiǎn)介dao (data access object 數(shù)據(jù)訪問對(duì)象)主要功能是數(shù)據(jù)操作,在程序開發(fā)架構(gòu)中屬于數(shù)據(jù)層的操作,程序的標(biāo)準(zhǔn)開發(fā)架構(gòu)如下:在整個(gè) dao 中實(shí)際上是以接口為操作標(biāo)準(zhǔn),即客戶端依靠dao 實(shí)現(xiàn)的接口進(jìn)行操作,而服務(wù)器端要將接口進(jìn)行具體的實(shí)現(xiàn)。由以下幾個(gè)部分組成:包的命名:數(shù)據(jù)庫(kù)連接:xxx.dbc.databaseconectiondao 接口: xxx.dao.ixxxdaodao 接口真實(shí)實(shí)現(xiàn)類:xxx.dao.impl.xxxdaoimpldao 接口代理實(shí)現(xiàn)類:xy.xxxdaoproxyvo 類: xxx.v
2、o.xxx, vo 的命名要與表的命名一致工廠類: xxx.factory.daofactorydao 開發(fā)dao 的開發(fā)完全圍繞數(shù)據(jù)庫(kù)進(jìn)行,使用如下表;.數(shù)據(jù)庫(kù)創(chuàng)建腳本:/*=刪除數(shù)據(jù)庫(kù)=*/drop database if exists hbmu ;/*=創(chuàng)建數(shù)據(jù)庫(kù)=*/create database hbmu ;/*=使用數(shù)據(jù)庫(kù)=*/use hbmu ;/*=刪除數(shù)據(jù)表=*/drop table if exists emp ;/*=創(chuàng)建數(shù)據(jù)表=*/create table emp(empnoint(4)primary key,enamevarchar(10),jobvarchar(9),
3、hiredatedate,salfloat(7,2) ;首先定義 vo 類, vo 類的名稱與表的名稱一致,但是要注意類的命名規(guī)范-單詞的開頭首;.字母大寫:定義對(duì)應(yīng)的vo 類-e.hbmu.vo;importjava.util.date;publicclassemp privateintempno ;privatestringename ;privatestringjob;privatedatehiredate;privatefloatsal;publicintgetempno() returnempno ;publicvoidsetempno(int
4、 empno) this. empno = empno;publicstring getename() returnename ;publicvoidsetename(string ename) this. ename = ename;publicstring getjob() returnjob ;publicvoidsetjob(string job) this. job= job;publicdate gethiredate() returnhiredate;publicvoidsethiredate(date hiredate) this. hiredate= hiredate;pub
5、licfloatgetsal() returnsal ;publicvoidsetsal(floatsal) this. sal= sal;.簡(jiǎn)單的 vo 類,定義了屬性、getter 、 setter 方法。日期使用的是java.util.date;定義數(shù)據(jù)庫(kù)連接類 - databasec.hbmu.dbc;importjava.sql.connection;importjava.sql.drivermanager;importjava.sql.sqlexception;publicclassdatabaseconnection priv
6、atestaticfinalstringdbdriver= org.gjt.mm.mysql.driver;privatestaticfinalstringdburl =jdbc:mysql:/localhost:3306/hbmu;privatestaticfinalstringdbuser =root;privatestaticfinalstringdbpassword=123;privateconnectionconn ;publicdatabaseconnection()throwsexception class.forname( dbdriver );this. conn =driv
7、ermanager.getconnection( dburl, dbuser, dbpassword);publicconnection getconnection()returnthis. conn ;publicvoidclose()throwsexceptionif( this. conn != null)trythis. conn .close();catch(exception e) throwe;在執(zhí)行數(shù)據(jù)庫(kù)連接和關(guān)閉中,由于可能出現(xiàn)意外情況而導(dǎo)致無法操作成功時(shí),所有的異常將統(tǒng)一交給調(diào)用處處理。如果要適用不同的數(shù)據(jù)庫(kù),可以將可能變化的地方聽過接口實(shí)現(xiàn),然后根據(jù)不同的數(shù)據(jù)庫(kù)定義不同的
8、子類,通過工廠類完成調(diào)用;.dao 接口 dao 接口: xxx.dao.ixxxdaopackage .hbmu.dao;import java.util.list;import .hbmu.vo.emp;public interface iempdao /*數(shù)據(jù)的增加操作,一般以doxxx的方式命名* param emp要增加的數(shù)據(jù)對(duì)象* return是否增加成功的標(biāo)記* throws exception有異常交給被調(diào)用處處理*/public boolean docreate(emp emp) throws;.exception;/*查詢?nèi)康臄?shù)據(jù)(多條記錄),一般
9、以findxxx的方式命名或getxxx* param keyword查詢關(guān)鍵字* return返回全部的查詢結(jié)果,每一個(gè)emp對(duì)象表示表的一行記錄* throws exception有異常交給被調(diào)用處處理*/public list findall(string keyword)throws exception;/* 根據(jù)雇員編號(hào)查詢雇員信息* param empno雇員編號(hào)* return雇員的vo 對(duì)象* throws exception有異常交給被調(diào)用處處理*/public emp findbyid(int empno) throwsexception;dao 接口定義完成后需要具體的實(shí)
10、現(xiàn)類,有兩種:1. 真實(shí)實(shí)現(xiàn)類2. 代理實(shí)現(xiàn)類dao 接口真實(shí)實(shí)現(xiàn)類:xxx.dao.impl.xxxdaoimpl真實(shí)實(shí)現(xiàn)類主要負(fù)責(zé)具體的數(shù)據(jù)庫(kù)操作,在操作時(shí)為了性能和安全使用preparedstatement接口完成。package .dao.impl;import java.sql.connection;import java.sql.preparedstatement;import java.sql.resultset;import java.util.arraylist;import java.util.list;import .hbmu.dao.i
11、empdao;import .hbmu.vo.emp;public class empdaoimpl implements iempdao private connection conn = null;/ 數(shù)據(jù)庫(kù)連接對(duì)象;.private preparedstatement pstmt = null;/ 數(shù)據(jù)庫(kù)操作對(duì)象public empdaoimpl(connection conn) /構(gòu)造方法接收外部傳遞來的數(shù)據(jù)庫(kù)連接的實(shí)例化對(duì)象this.conn = conn;/ 取得數(shù)據(jù)庫(kù)連接public boolean docreate(emp emp) throws exception
12、 boolean flag = false;/ 定義標(biāo)志位string sql = insert into emp(empno,ename,job,hiredate,sal) values(?,?,?,?,?); this.pstmt = this.conn.preparestatement(sql);/ 實(shí)例化預(yù)處理對(duì)象 this.pstmt.setint(1, emp.getempno();/ 設(shè)置 empno this.pstmt.setstring(2, emp.getename(); this.pstmt.setstring(3, emp.getjob();this.pstmt.se
13、tdate(4, new java.sql.date(emp.gethiredate().gettime();/設(shè)置 hiredate 對(duì)象, preparedstatement 對(duì)象的 setdate 方法是用的是 sql date value ,需要轉(zhuǎn)換 java.util.date.gettime()this.pstmt.setfloat(5, emp.getsal();if (this.pstmt.executeupdate() 0) / 更新記錄的行數(shù)大于 0 flag = true;/ 修改標(biāo)志位this.pstmt.close();/ 關(guān)閉 preparedstatement對(duì)象
14、return flag;public list findall(string keyword) throws exception list all = new arraylist();/定義集合,接收全部數(shù)據(jù)string sql = select empno,ename,job,hiredate,sal from emp where ename like ? or joblike ?;this.pstmt = this.conn.preparestatement(sql);/ 實(shí)例化預(yù)處理對(duì)象 this.pstmt.setstring(1, % + keyword + %);/ 設(shè)置查詢的關(guān)鍵
15、字 this.pstmt.setstring(2, % + keyword + %);/ resultset rs = this.pstmt.executequery();/ 執(zhí)行查詢操作while (rs.next() /依次取出每一條數(shù)據(jù)emp emp = new emp();/實(shí)例化 emp 對(duì)象emp.setempno(rs.getint(1);/設(shè)置對(duì)象內(nèi)容emp.setename(rs.getstring(2);emp.setjob(rs.getstring(3);emp.sethiredate(rs.getdate(4);emp.setsal(rs.getfloat(5);all
16、.add(emp);/向集合添加對(duì)象this.pstmt.close();return all;.public emp findbyid(int empno) throws exception emp emp = null;string sql = select empno,ename,job,hiredate,sal from emp where empno=?; this.pstmt = this.conn.preparestatement(sql);this.pstmt.setint(1, empno);resultset rs = this.pstmt.executequery();i
17、f (rs.next() emp = new emp();emp.setempno(rs.getint(1);emp.setename(rs.getstring(2);emp.setjob(rs.getstring(3);emp.sethiredate(rs.getdate(4);emp.setsal(rs.getfloat(5);this.pstmt.close();return emp;在真實(shí)的實(shí)現(xiàn)類中, 根本沒有處理數(shù)據(jù)庫(kù)的打開和連接操作, 只是通過構(gòu)造方法取得了數(shù)據(jù)庫(kù)的連接,而真正負(fù)責(zé)打開和關(guān)閉數(shù)據(jù)庫(kù)的操作由代理類完成。dao 接口代理實(shí)現(xiàn)類:xy.xxxdaop
18、xy;importjava.sql.resultset;importjava.util.arraylist;importjava.util.list;.hbmu.dao.iempdao;.hbmu.dbc.databaseconnection;.hbmu.vo.emp;.dao.impl.empdaoimpl;publicclassempdaoproxyimplementsiempdao privatedatabaseconnec
19、tiondbc = null; / 定義數(shù)據(jù)庫(kù)的連接類privateiempdao dao = null ;/聲明 dao對(duì)象publicempdaoproxy()throwsexception/在構(gòu)造方法中實(shí)例化連接,同時(shí)實(shí)例化 dao對(duì)象this. dbc = new databaseconnection();/連接數(shù)據(jù)庫(kù)this. dao = new empdaoimpl(this. dbc .getconnection();/ 實(shí)例化真實(shí)主;.題類publicbooleandocreate(emp emp)throwsexception booleanflag =false;tryif
20、(this. dao .findbyid(emp.getempno() =null) /如果要插入的雇員編號(hào)不存在flag =this. dao .docreate(emp);/調(diào)用真實(shí)主題操作catch(exception e) /有異常交給被調(diào)用處throwe; finallythis. dbc .close();/關(guān)閉數(shù)據(jù)庫(kù)returnflag;publiclist findall(string keyword)throwsexceptionlist all =null;tryall =this. dao .findall(keyword) ; catch(exception e)thr
21、owe ; finallythis. dbc .close() ;returnall ;publicemp findbyid(intempno)throwsexceptionemp emp =null;tryemp =this. dao .findbyid(empno) ; catch(exception e)throwe ; finallythis. dbc .close() ;returnemp ;在代理類的構(gòu)造方法中實(shí)例化了數(shù)據(jù)庫(kù)連接類的對(duì)象以及真實(shí)實(shí)現(xiàn)類,而在代理中的各個(gè)方法只是調(diào)用了真實(shí)主題實(shí)現(xiàn)類中的相應(yīng)方法。;.異常處理格式:tryxxxxxxxxxxxxxxxxxxxxxxxxx
22、xx catch(exception e)throwe ; finallythis. dbc .close() ;工廠類: xxx.factory.daof.hbmu.factory;.hbmu.dao.iempdao;xy.empdaoproxy;publicclassdaofactory publicstaticiempdao getiempdaoinstance()throwsexceptionreturnnew empdaoproxy() ;本工廠類中的功能就是直接返回dao
23、 接口的實(shí)例化對(duì)象,以后的客戶端直接通過工廠類就可以取得 dao 接口的實(shí)例化對(duì)象。測(cè)試 dao 插入類 -testdaoi.hbmu.dao.test;.hbmu.factory.daofactory;.hbmu.vo.emp;publicclasstestdaoinsert publicstaticvoidmain(string args)throwsexception emp emp =null;for( intx=0;x5;x+)emp =new emp() ;emp.setempno(1000 + x) ;emp.setename( 劉向陽- + x) ;emp.setjob( 程序員 - + x) ;emp.sethiredate(new java.util.date() ;emp.setsal(500 * x) ;daofactory.getiempdaoinstance().docreate(emp) ;測(cè)試查詢操作 -testdaosele
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 職業(yè)病防治策略與風(fēng)險(xiǎn)評(píng)估
- 中學(xué)生活教官培訓(xùn)制度
- 新入職治療師培訓(xùn)制度
- 師德師風(fēng)培訓(xùn)教育制度
- 質(zhì)量控制人員培訓(xùn)制度
- 路虎捷豹4s店培訓(xùn)制度
- 培訓(xùn)機(jī)構(gòu)決策制度及流程
- 危化品新員工崗前培訓(xùn)制度
- 數(shù)學(xué)教研培訓(xùn)制度及流程
- ct室業(yè)務(wù)知識(shí)培訓(xùn)制度
- DB21T 3444-2021老玉分級(jí)規(guī)范
- 辦公室節(jié)能減排措施
- MT/T 544-1996礦用液壓斜軸式軸向柱塞馬達(dá)試驗(yàn)方法
- GB/T 16927.2-2013高電壓試驗(yàn)技術(shù)第2部分:測(cè)量系統(tǒng)
- 數(shù)字信號(hào)處理課程實(shí)驗(yàn)教學(xué)大綱
- 2023年黑龍江省哈爾濱市中考化學(xué)試卷及解析
- 深基坑施工專項(xiàng)方案
- 禾川x3系列伺服說明書
- 環(huán)境與人類健康環(huán)境與人類健康
- 高中英語選擇性必修三 課文及翻譯
- 學(xué)校桶裝水招標(biāo)項(xiàng)目實(shí)施方案
評(píng)論
0/150
提交評(píng)論