使用java實(shí)現(xiàn)數(shù)據(jù)庫(kù)編程_第1頁(yè)
使用java實(shí)現(xiàn)數(shù)據(jù)庫(kù)編程_第2頁(yè)
使用java實(shí)現(xiàn)數(shù)據(jù)庫(kù)編程_第3頁(yè)
使用java實(shí)現(xiàn)數(shù)據(jù)庫(kù)編程_第4頁(yè)
使用java實(shí)現(xiàn)數(shù)據(jù)庫(kù)編程_第5頁(yè)
已閱讀5頁(yè),還剩33頁(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)介

第八章DAO模式預(yù)習(xí)檢查什么是持久化?主要的持久化操作有哪些?什么是DAO模式,使用該模式有哪些優(yōu)勢(shì)?DAO模式由哪幾部分組成?集中測(cè)試2/38回顧與作業(yè)點(diǎn)評(píng)如何使用JDBC連接數(shù)據(jù)庫(kù)?PreparedStatement與Statement相比,具有什么優(yōu)勢(shì)?提問作業(yè)點(diǎn)評(píng)點(diǎn)評(píng)作業(yè)的提交情況和共性問題3/38本章任務(wù)使用DAO模式實(shí)現(xiàn)主人登錄使用DAO模式實(shí)現(xiàn)寵物類型的查詢實(shí)現(xiàn)主人領(lǐng)養(yǎng)寵物4/38本章目標(biāo)掌握DAO模式使用Properties類讀取配置信息使用實(shí)體類傳遞數(shù)據(jù)5/38JDBC讀取查找保存刪除修改回顧JDBC操作將程序中的數(shù)據(jù)在瞬時(shí)狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機(jī)制即為數(shù)據(jù)持久化6/38持久化的實(shí)現(xiàn)方式數(shù)據(jù)庫(kù)普通文件XML文件數(shù)據(jù)庫(kù)普通文件XML文件7/38為什么進(jìn)行JDBC封裝3-1Scannerinput=newScanner(System.in);System.out.print("請(qǐng)輸入登錄名:");Stringname=input.next();System.out.print("請(qǐng)輸入登錄密碼:");Stringpassword=input.next();//省略加載驅(qū)動(dòng)……try{conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/epet","epetadmin","0000"););//省略代碼……if(rs.next()) System.out.println("登錄成功,歡迎您!"); else System.out.println("登錄失敗,請(qǐng)重新輸入!"); //省略代碼……}catch(SQLExceptione){ ……}finally{}業(yè)務(wù)相關(guān)代碼數(shù)據(jù)訪問代碼示例8/38為什么進(jìn)行JDBC封裝3-2業(yè)務(wù)代碼和數(shù)據(jù)訪問代碼耦合可讀性差不利于后期修改和維護(hù)不利于代碼復(fù)用采用面向接口編程,可以降低代碼間的耦合性9/38如何進(jìn)行JDBC封裝隔離業(yè)務(wù)邏輯代碼和數(shù)據(jù)訪問代碼隔離不同數(shù)據(jù)庫(kù)的實(shí)現(xiàn)數(shù)據(jù)訪問代碼MySQLSQLServerOracle業(yè)務(wù)邏輯代碼業(yè)務(wù)邏輯代碼調(diào)用數(shù)據(jù)訪問接口為什么進(jìn)行JDBC封裝3-310/38將對(duì)寵物的所有操作抽取成接口實(shí)現(xiàn)JDBC封裝6-1publicinterfacePetDao{intsave(Petpet);intdel(Petpet);intupdate(Petpet);PetgetByName(Stringname);List<Pet>findByName(Stringname);List<Pet>findByType(Stringtype);}以對(duì)象傳參數(shù)接口由不同數(shù)據(jù)庫(kù)的實(shí)現(xiàn)類分別實(shí)現(xiàn)示例11/38定義實(shí)體類Pet類包含相關(guān)屬性實(shí)現(xiàn)屬性的getter/setter方法publicclassPet{privateintid;//寵物idprivateintmasterId;//主人idprivateStringname;//昵稱……publicintgetId(){ returnid;}publicvoidsetId(intid){ this.id=id;}……}屬性getter/setter方法實(shí)現(xiàn)數(shù)據(jù)訪問接口實(shí)現(xiàn)JDBC封裝6-2示例12/38PetDao實(shí)現(xiàn)類的方法:update()方法publicclassPetDaoMySQLImpl

implementsPetDao{publicintupdate(Petpet){ Stringdriver="com.mysql.jdbc.Driver";Stringurl="jdbc:mysql://localhost:3306/epet"; …… Stringsql="updatepetsetstatus=0whereid=?"; pstmt=conn.prepareStatement(sql); pstmt.setInt(1,pet.getId()); result=pstmt.executeUpdate(); …… finally{…… if(null!=pstmt)pstmt.close(); if(null!=conn)conn.close(); …… }}}數(shù)據(jù)庫(kù)連接信息執(zhí)行更新操作在finally塊中關(guān)閉數(shù)據(jù)庫(kù)連接實(shí)現(xiàn)JDBC封裝6-3通用的操作是否能夠進(jìn)一步簡(jiǎn)化?示例13/38數(shù)據(jù)庫(kù)工具類2-1將通用的操作(打開、關(guān)閉連接等)封裝到工具類publicclassBaseDao{privateStringdriver="com.mysql.jdbc.Driver";

privateStringurl="jdbc:mysql://localhost:3306/epet";

……publicConnectiongetConnection(){ ……

Class.forName(driver); conn=DriverManager.getConnection(url,user,password); …… returnconn;}publicvoidcloseAll(Connectionconn,Statementstmt,ResultSetrs){if(rs!=null)rs.close(); if(stmt!=null)stmt.close(); ……}}獲取數(shù)據(jù)庫(kù)連接關(guān)閉數(shù)據(jù)庫(kù)連接實(shí)現(xiàn)JDBC封裝6-4示例14/38數(shù)據(jù)庫(kù)工具類2-2數(shù)據(jù)庫(kù)工具類BaseDao:增、刪、改的通用方法publicintexceuteUpdate(StringpreparedSql,Object[]param){……conn=getConnection();try{ pstmt=conn.prepareStatement(preparedSql); if(param!=null){

for(inti=0;i<param.length;i++){//為預(yù)編譯sql設(shè)置參數(shù) pstmt.setObject(i+1,param[i]); } } num=pstmt.executeUpdate();}……}實(shí)現(xiàn)JDBC封裝6-5示例15/38實(shí)現(xiàn)類實(shí)現(xiàn)接口并繼承數(shù)據(jù)庫(kù)工具類實(shí)現(xiàn)JDBC封裝6-6publicclassPetDaoMySQLImpl2extendsBaseDaoimplementsPetDao{//更新寵物狀態(tài)

publicintupdate(Petpet){ Stringsql="updatepetsetstatus=0whereid=?"; Object[]param={pet.getId()}; intresult=this.exceuteUpdate(sql,param); returnresult; } //省略實(shí)現(xiàn)PetDao的其他方法}此種封裝JDBC的結(jié)構(gòu)即為DAO模式演示示例1:使用DAO模式更新寵物示例16/38什么是DAO非常流行的數(shù)據(jù)訪問模式——DAO模式DataAccessObject(數(shù)據(jù)存取對(duì)象)位于業(yè)務(wù)邏輯和持久化數(shù)據(jù)之間實(shí)現(xiàn)對(duì)持久化數(shù)據(jù)的訪問列1列2列3類DAO數(shù)據(jù)表DAO起著轉(zhuǎn)換器的作用,把實(shí)體類轉(zhuǎn)換為數(shù)據(jù)庫(kù)中的記錄17/38DAO模式的組成DAO模式的組成部分DAO接口DAO實(shí)現(xiàn)類實(shí)體類數(shù)據(jù)庫(kù)連接和關(guān)閉工具類優(yōu)勢(shì)隔離了數(shù)據(jù)訪問代碼和業(yè)務(wù)邏輯代碼隔離了不同數(shù)據(jù)庫(kù)實(shí)現(xiàn)18/38為什么使用Properties類publicclassBaseDao{ privateStringdriver="com.mysql.jdbc.Driver";

privateStringurl="jdbc:mysql://localhost:3306/epet";

privateStringuser="epetadmin";

privateStringpassword=“0000";

Connectionconn=null;

publicConnectiongetConnection(){ if(conn==null){ try{ Class.forName(driver); conn=DriverManager.getConnection(url,user,password); }catch(Exceptione){//省略代碼……} } returnconn;//返回連接對(duì)象

}修改后需重新編譯讓用戶脫離程序本身修改相關(guān)的變量設(shè)置——使用配置文件19/38properties配置文件Java中的配置文件常為properties文件后綴為.properties格式是“鍵=值”格式使用“?!眮?lái)注釋.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/epetusername=epetadminpassword=0000鍵值演示:添加properties文件20/38讀取配置文件Java中提供了Properties類來(lái)讀取配置文件方法名說(shuō)明StringgetProperty(Stringkey)用指定的鍵在此屬性列表中搜索屬性。通過(guò)參數(shù)key得到其所對(duì)應(yīng)的值ObjectsetProperty(Stringkey,Stringvalue)調(diào)用Hashtable的方法put。通過(guò)調(diào)用基類的put()方法來(lái)設(shè)置鍵-值對(duì)voidload(InputStreaminStream)從輸入流中讀取屬性列表(鍵和元素對(duì))。通過(guò)對(duì)指定文件進(jìn)行裝載獲取該文件中所有鍵-值對(duì)voidclear()清除所裝載的鍵-值對(duì),該方法由基類Hashtable提供21/38讀取配置文件publicclassBaseDao{

//省略變量定義代碼……

static{

init();} publicstaticvoidinit(){ Propertiesparams=newProperties(); StringconfigFile="perties";

InputStreamis=BaseDao.class.getClassLoader().getResourceAsStream(configFile); try{ params.load(is); }catch(IOExceptione){//….}

driver=params.getProperty("driver"); url=params.getProperty("url"); user=params.getProperty("user"); password=params.getProperty("password"); }//省略其他方法代碼……}配置文件路徑加載配置文件到輸入流中從輸入流中讀取屬性列表根據(jù)指定的鍵獲取對(duì)應(yīng)的值靜態(tài)代碼塊中調(diào)用,類加載時(shí)執(zhí)行演示示例2:使用Properties類讀取配置文件22/38小結(jié)什么是DAO?DAO模式的作用是什么?DAO是由哪幾部分組成的?JDBC操作中哪些地方建議讀取配置文件?為什么?提問23/38學(xué)員操作——實(shí)現(xiàn)寵物主人登錄的數(shù)據(jù)訪問需求說(shuō)明創(chuàng)建數(shù)據(jù)庫(kù)表主人表master(id,name,password)寵物種類表pet_type(id,name)寵物表pet(id,master_id,name,type_id,health,love,adopt_time,status)創(chuàng)建數(shù)據(jù)庫(kù)工具類BaseDao定義實(shí)體類Master,與表master對(duì)應(yīng)定義MasterDao接口創(chuàng)建MasterDao的實(shí)現(xiàn)類,實(shí)現(xiàn)查詢方法練習(xí)完成時(shí)間:25分鐘24/38學(xué)員操作——實(shí)現(xiàn)寵物主人登錄業(yè)務(wù)2-1訓(xùn)練要點(diǎn)測(cè)試DAO模式需求說(shuō)明完成主人的登錄驗(yàn)證功能指導(dǎo)講解需求說(shuō)明25/38學(xué)員操作——實(shí)現(xiàn)寵物主人登錄業(yè)務(wù)2-2實(shí)現(xiàn)思路定義測(cè)試類Test,調(diào)用DAO代碼進(jìn)入驗(yàn)證注意編寫注釋指導(dǎo)完成時(shí)間:15分鐘26/38常見問題及解決辦法代碼規(guī)范問題調(diào)試技巧共性問題集中講解共性問題集中講解27/38使用實(shí)體類傳遞數(shù)據(jù)數(shù)據(jù)訪問代碼和業(yè)務(wù)邏輯代碼之間通過(guò)實(shí)體類來(lái)傳輸數(shù)據(jù)業(yè)務(wù)邏輯代碼數(shù)據(jù)訪問代碼28/38實(shí)體類特征屬性一般使用private修飾提供public修飾的getter/setter方法實(shí)體類提供無(wú)參構(gòu)造方法,根據(jù)業(yè)務(wù)提供有參構(gòu)造實(shí)現(xiàn)java.io.Serializable接口,支持序列化機(jī)制使用實(shí)體類傳遞數(shù)據(jù)29/38學(xué)員操作——實(shí)現(xiàn)寵物類型的查詢需求說(shuō)明在上機(jī)練習(xí)2的基礎(chǔ)上,實(shí)現(xiàn)查詢寵物類型和根據(jù)寵物名稱查找寵物編號(hào)功能如果登錄成功,則顯示寵物類型名稱。選擇寵物類型后,顯示寵物類型編號(hào)如果登錄不成功則不顯示寵物類型名稱練習(xí)完成時(shí)間:30分鐘30/38常見問題及解決辦法代碼規(guī)范問題調(diào)試技巧共性問題集中講解共性問題集中講解31/38學(xué)員操作——實(shí)現(xiàn)主人領(lǐng)養(yǎng)寵物2-1訓(xùn)練要點(diǎn)使用實(shí)體類傳遞數(shù)據(jù)DAO模式需求說(shuō)明在上機(jī)練習(xí)3的基礎(chǔ)上,實(shí)現(xiàn)主人領(lǐng)養(yǎng)寵物的功能指導(dǎo)講解需求說(shuō)明32/38學(xué)員操作——實(shí)現(xiàn)主人領(lǐng)養(yǎng)寵物2-2實(shí)現(xiàn)思路

定義實(shí)體類

溫馨提示

  • 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)論