




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第7章章 MVC與與DAO模式模式陳小潘E-mail: 計(jì)算機(jī)與信息工程學(xué)院501本章要點(diǎn)本章要點(diǎn) MVC框架模式簡(jiǎn)介 JSP中實(shí)現(xiàn)MVC框架模式 重定向與轉(zhuǎn)發(fā) 頁(yè)面間數(shù)據(jù)共享方式 具體實(shí)例:用戶(hù)注冊(cè)模塊 DAO模式Java Web程序設(shè)計(jì)22022-3-22第第7章章MVC與與DAO模式模式7.1 MVC框架模式簡(jiǎn)介7.2 在JSP中實(shí)現(xiàn)MVC框架模式7.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向7.4 頁(yè)面間數(shù)據(jù)的共享方式7.5 DAO模式7.6 Apache DbUtils工具類(lèi)Java Web程序設(shè)計(jì)32022-3-22第第7章章MVC與與DAO模式模式7.1 MVC框架模式簡(jiǎn)介7.2 在JSP中實(shí)現(xiàn)MV
2、C框架模式7.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向7.4 頁(yè)面間數(shù)據(jù)的共享方式7.5 DAO模式7.6 Apache DbUtils工具類(lèi)Java Web程序設(shè)計(jì)42022-3-227.1 MVC框架模式框架模式7.1.1 MVC框架模式介紹7.1.2 MVC框架模式的優(yōu)勢(shì)Java Web程序設(shè)計(jì)52022-3-227.1.1 MVC框架模式介紹框架模式介紹 MVC即Model-View-Controller(模型-視圖-控制器)是一種軟件設(shè)計(jì)模式,MVC最早出現(xiàn)在Smalltalk語(yǔ)言中,后來(lái)在Java中得到廣泛應(yīng)用,并且被Sun公司推薦為Java EE平臺(tái)的設(shè)計(jì)模式。 MVC把應(yīng)用程序分成了三個(gè)核心模塊,
3、即業(yè)務(wù)邏輯層、視圖層和控制層。實(shí)質(zhì)上,模型表示數(shù)據(jù)業(yè)務(wù)處理功能,視圖表示數(shù)據(jù)顯示,控制器表示流程控制。Java Web程序設(shè)計(jì)62022-3-227.1.1 MVC框架模式介紹框架模式介紹 Model模型:用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對(duì)數(shù)據(jù)的處理方法。模型有對(duì)數(shù)據(jù)直接訪問(wèn)的能力。 View視圖:視圖層能夠?qū)崿F(xiàn)數(shù)據(jù)有目的的顯示。在視圖中一般沒(méi)有程序上的邏輯,它從模型那里獲得數(shù)據(jù)并指定這些數(shù)據(jù)如何表現(xiàn)。當(dāng)模型變化時(shí),視圖負(fù)責(zé)維持?jǐn)?shù)據(jù)表現(xiàn)的一致性,視圖同時(shí)負(fù)責(zé)將用戶(hù)需求通知給控制器。 Controller控制器:控制器相當(dāng)于調(diào)度者,用于控制應(yīng)用程序的流程。它處理事件并做出響應(yīng)。Java
4、 Web程序設(shè)計(jì)72022-3-227.1.1 MVC框架模式介紹框架模式介紹Java Web程序設(shè)計(jì)82022-3-227.1.1 MVC框架模式介紹框架模式介紹 傳統(tǒng)JSP運(yùn)行機(jī)制 在傳統(tǒng)的Java Web應(yīng)用中,JSP頁(yè)面既負(fù)責(zé)數(shù)據(jù)顯示,又負(fù)責(zé)業(yè)務(wù)邏輯處理和流程控制,導(dǎo)致程序維護(hù)困難,代碼可讀性差,程序和頁(yè)面間高度耦合,致使程序不易于擴(kuò)展。Java Web程序設(shè)計(jì)9圖圖1 傳統(tǒng)傳統(tǒng)JSP運(yùn)行機(jī)制運(yùn)行機(jī)制2022-3-227.1.1 MVC框架模式介紹框架模式介紹 基于MVC的JSP MODEL1與JSP MODLE 2 為了解決傳統(tǒng)JSP遇到的這些問(wèn)題,Sun公司基于MVC思想提出了兩種
5、開(kāi)發(fā)模式:JSP Model1和JSP Model2。圖圖2 JSP MODEL 1Java Web程序設(shè)計(jì)102022-3-227.1.1 MVC框架模式介紹框架模式介紹圖圖 JSP MODEL 2Java Web程序設(shè)計(jì)11 基于MVC的JSP Model1與JSP Model 22022-3-227.1.2 MVC框架模式的優(yōu)勢(shì)框架模式的優(yōu)勢(shì)應(yīng)用程序使用MVC框架模式有以下優(yōu)勢(shì):有利于代碼復(fù)用。MVC框架模式的分層開(kāi)發(fā)模式,有利于實(shí)現(xiàn)代碼及組件的復(fù)用。有利于開(kāi)發(fā)人員分工。在MVC框架模式中,徹底地把應(yīng)用程序的界面設(shè)計(jì)與程序設(shè)計(jì)分離,有利于人員分工。有利于降低程序模塊間的耦合,便于程序的維
6、護(hù)與擴(kuò)展。在MVC框架模式中,三個(gè)層次之間是相互獨(dú)立的,每層負(fù)責(zé)實(shí)現(xiàn)具體的功能,如果某層發(fā)生了改變不會(huì)影響其他兩層的正常使用。Java Web程序設(shè)計(jì)122022-3-22第第7章章MVC與與DAO模式模式7.1 MVC框架模式簡(jiǎn)介7.2 在JSP中實(shí)現(xiàn)MVC框架模式7.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向7.4 頁(yè)面間數(shù)據(jù)的共享方式7.5 DAO模式7.6 Apache DbUtils工具類(lèi)Java Web程序設(shè)計(jì)132022-3-22第第7章章MVC與與DAO模式模式 程序運(yùn)行界面 用戶(hù)點(diǎn)擊不同的按鈕可以分別實(shí)現(xiàn)登錄和注冊(cè)的功能。2022-3-22Java Web程序設(shè)計(jì)14第第7章章MVC與與DAO模式
7、模式2022-3-22Java Web程序設(shè)計(jì)157.2 JSP中實(shí)現(xiàn)中實(shí)現(xiàn)MVC框架模式框架模式以用戶(hù)注冊(cè)模塊來(lái)介紹在JSP中如何實(shí)現(xiàn)MVC模式(1)程序結(jié)構(gòu)henu.bean.User:模型層,實(shí)現(xiàn)用戶(hù)注冊(cè)的業(yè)務(wù)模型及數(shù)據(jù)庫(kù)操作;henu.servlet.UserServlet:控制器層的角色,用于流程控制,調(diào)度模型和選擇視圖展示運(yùn)行結(jié)果;regist.jsp和result.jsp等頁(yè)面為視圖層,負(fù)責(zé)交互與結(jié)果展現(xiàn)。Java Web程序設(shè)計(jì)162022-3-227.2 JSP中實(shí)現(xiàn)中實(shí)現(xiàn)MVC框架模式框架模式(2)編程思想)編程思想用戶(hù)通過(guò)用戶(hù)通過(guò)JSP頁(yè)面的表單輸入注冊(cè)信息,表單提交后由
8、頁(yè)面的表單輸入注冊(cè)信息,表單提交后由Servlet獲取表單中的數(shù)據(jù)并交由獲取表單中的數(shù)據(jù)并交由JavaBean對(duì)象存儲(chǔ)用對(duì)象存儲(chǔ)用戶(hù)數(shù)據(jù),然后將戶(hù)數(shù)據(jù),然后將JavaBean對(duì)象的數(shù)據(jù)保存至數(shù)據(jù)庫(kù)中,對(duì)象的數(shù)據(jù)保存至數(shù)據(jù)庫(kù)中,最后再由最后再由Servlet通知相應(yīng)的視圖顯示用戶(hù)注冊(cè)的結(jié)果。通知相應(yīng)的視圖顯示用戶(hù)注冊(cè)的結(jié)果。 Java Web程序設(shè)計(jì)172022-3-227.2 JSP中實(shí)現(xiàn)中實(shí)現(xiàn)MVC框架模式框架模式(3)用例事件流描述)用例事件流描述用戶(hù)注冊(cè):A簡(jiǎn)單描述本用例描述系統(tǒng)各類(lèi)用戶(hù)注冊(cè)。B前置條件無(wú)C后置條件如果用例成功,則轉(zhuǎn)到顯示結(jié)果頁(yè)面result.jsp,否則,提示出錯(cuò)信息。
9、D擴(kuò)充點(diǎn)無(wú)E事件流當(dāng)用戶(hù)單擊登錄頁(yè)面的用戶(hù)注冊(cè)鏈接時(shí),用例啟動(dòng)?;鳎簾o(wú)替代流:用戶(hù)注冊(cè)失敗后,轉(zhuǎn)入用戶(hù)提示出錯(cuò)頁(yè)面error.jsp。Java Web程序設(shè)計(jì)182022-3-227.2 JSP中實(shí)現(xiàn)中實(shí)現(xiàn)MVC框架模式框架模式(1)表示層的主要工作是實(shí)現(xiàn)人機(jī)交互,展現(xiàn)程序執(zhí)行結(jié)果,在本例中注冊(cè)頁(yè)面regist.jsp提供一個(gè)表單負(fù)責(zé)收集用戶(hù)的信息并發(fā)送請(qǐng)求調(diào)用控制器UserServlet;結(jié)果頁(yè)面result.jsp顯示注冊(cè)成功的信息;而錯(cuò)誤提示頁(yè)面error.jsp顯示錯(cuò)誤信息。Java Web程序設(shè)計(jì)192022-3-227.2 JSP中實(shí)現(xiàn)中實(shí)現(xiàn)MVC框架模式框架模式(2)模型層Us
10、er.java處理業(yè)務(wù)邏輯,其功能有兩個(gè):一是對(duì)應(yīng)數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)成員變量,作為視圖層與數(shù)據(jù)表之間的數(shù)據(jù)中轉(zhuǎn)站,存儲(chǔ)數(shù)據(jù);二是負(fù)責(zé)實(shí)現(xiàn)用戶(hù)注冊(cè)的業(yè)務(wù)邏輯,完成對(duì)數(shù)據(jù)庫(kù)的操作。Java Web程序設(shè)計(jì)202022-3-227.2 JSP中實(shí)現(xiàn)中實(shí)現(xiàn)MVC框架模式框架模式(3)控制器層的功能有三個(gè):一是獲取請(qǐng)求表單中的用戶(hù)信息;二是封裝模型層對(duì)象user,并調(diào)用其方法regist實(shí)現(xiàn)用戶(hù)信息的保存;三是選擇相應(yīng)的視圖展現(xiàn)程序執(zhí)行結(jié)果。Java Web程序設(shè)計(jì)212022-3-227.2 JSP中實(shí)現(xiàn)中實(shí)現(xiàn)MVC框架模式框架模式動(dòng)手實(shí)踐:設(shè)計(jì)一個(gè)Web應(yīng)用程序,判斷一個(gè)一元二次方程ax2+bx+c=z
11、有幾個(gè)根。該程序包括兩個(gè)JSP頁(yè)面root.jsp和result.jsp;一個(gè)JavaBean和一個(gè)Servlet。要求使用MVC模式實(shí)現(xiàn)此功能,即用戶(hù)通過(guò)root.jsp輸入一元二次方法a,b,c和z的值;提交該頁(yè)面后使用JavaBean存儲(chǔ)這些值和結(jié)果;使用Servlet進(jìn)行判斷并最終將結(jié)果顯示到result.jsp頁(yè)面中。Java Web程序設(shè)計(jì)222022-3-22第第7章章MVC與與DAO模式模式7.1 MVC框架模式簡(jiǎn)介7.2 在JSP中實(shí)現(xiàn)MVC框架模式7.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向7.4 頁(yè)面間數(shù)據(jù)的共享方式7.5 DAO模式Java Web程序設(shè)計(jì)232022-3-227.3 請(qǐng)求
12、轉(zhuǎn)發(fā)與重定向請(qǐng)求轉(zhuǎn)發(fā)與重定向Internet的一個(gè)主要特征就是通過(guò)超級(jí)鏈接聚合了大量的信息資源,Web應(yīng)用中各個(gè)資源(包括HTML/JSP頁(yè)面、Servlet對(duì)象等)也可以實(shí)現(xiàn)資源的相互關(guān)聯(lián)與整合,在Java Web應(yīng)用中可使用以下幾種方式達(dá)到Web資源的關(guān)聯(lián)與整合。請(qǐng)求轉(zhuǎn)發(fā)重定向包含 Java Web程序設(shè)計(jì)242022-3-227.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向請(qǐng)求轉(zhuǎn)發(fā)與重定向(1)請(qǐng)求轉(zhuǎn)發(fā)/請(qǐng)求轉(zhuǎn)發(fā)至target.jsp頁(yè)面RequestDispatcher dispatcher=request.getRequestDispatcher(target.jsp);dispatcher.forward
13、(request, response);RequestDispatcher對(duì)象可以把用戶(hù)對(duì)當(dāng)前Web資源的請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)Web資源,如上述代碼的target.jsp頁(yè)面。簡(jiǎn)而言之,當(dāng)前頁(yè)面將和目標(biāo)頁(yè)面target.jsp共享一個(gè)請(qǐng)求對(duì)象。Java Web程序設(shè)計(jì)252022-3-227.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向請(qǐng)求轉(zhuǎn)發(fā)與重定向注意: 請(qǐng)求轉(zhuǎn)發(fā)方式通常用于Servlet中,請(qǐng)求轉(zhuǎn)發(fā)方式只能把請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)Web應(yīng)用中的頁(yè)面,并不能轉(zhuǎn)發(fā)給其他Web應(yīng)用中的資源。Java Web程序設(shè)計(jì)262022-3-227.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向請(qǐng)求轉(zhuǎn)發(fā)與重定向(2)重定向重定向重定向是將來(lái)自客戶(hù)端的請(qǐng)求傳遞給其他
14、的重定向是將來(lái)自客戶(hù)端的請(qǐng)求傳遞給其他的Web資源,資源,與請(qǐng)求轉(zhuǎn)發(fā)不同的是,目標(biāo)資源可以是不在同一個(gè)與請(qǐng)求轉(zhuǎn)發(fā)不同的是,目標(biāo)資源可以是不在同一個(gè)Web應(yīng)用中。在應(yīng)用中。在Servlet中,使用中,使用HttpServletResponse對(duì)象的對(duì)象的sendRedirect()方法實(shí)現(xiàn)重定向。方法實(shí)現(xiàn)重定向。/從當(dāng)前頁(yè)面跳轉(zhuǎn)至相對(duì)路徑為pages/target.jsp的頁(yè)面。response.sendRedirect(pages/target.jsp);Java Web程序設(shè)計(jì)272022-3-227.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向請(qǐng)求轉(zhuǎn)發(fā)與重定向重定向與請(qǐng)求轉(zhuǎn)發(fā)的區(qū)別:重定向可以將Web資源指向任何
15、一個(gè)URL,而不僅僅局限于同一個(gè)Web應(yīng)用中。重定向是返回一個(gè)應(yīng)答給客戶(hù)端,然后再重新發(fā)送一個(gè)請(qǐng)求給目標(biāo)URL,所以瀏覽器地址欄會(huì)更新為目標(biāo)Web資源的URL;而使用RequestDispatcher對(duì)象請(qǐng)求轉(zhuǎn)向時(shí),瀏覽器地址欄不會(huì)更新,仍為原有Web資源的URL。使用重定向時(shí),Web資源之間不會(huì)共享使用用戶(hù)請(qǐng)求對(duì)象request,而RequestDispatcher則共享。Java Web程序設(shè)計(jì)282022-3-22第第7章章MVC與與DAO模式模式7.1 MVC框架模式簡(jiǎn)介7.2 在JSP中實(shí)現(xiàn)MVC框架模式7.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向7.4 頁(yè)面間數(shù)據(jù)的共享方式7.5 DAO模式Java
16、Web程序設(shè)計(jì)292022-3-227.4 頁(yè)面間數(shù)據(jù)共享方式頁(yè)面間數(shù)據(jù)共享方式(1)重寫(xiě)URL重寫(xiě)URL是在URL的后面附加參數(shù),和服務(wù)器的請(qǐng)求一起發(fā)送,這些參數(shù)稱(chēng)為查詢(xún)字符串。查詢(xún)字符串為一對(duì)“名稱(chēng)/值”對(duì),URL中多個(gè)查詢(xún)字符串之間使用“&”符號(hào)連接。如 ,此URL將向目標(biāo)頁(yè)面detail.jsp中傳遞兩個(gè)查詢(xún)字符串id和action,其值分別為10和delete。使用request內(nèi)置對(duì)象的getParameter()方法獲取查詢(xún)字符串的對(duì)應(yīng)值。String id = request.getParameter(id);String action = request.getParamet
17、er(action);Java Web程序設(shè)計(jì)302022-3-227.4 頁(yè)面間數(shù)據(jù)共享方式頁(yè)面間數(shù)據(jù)共享方式重寫(xiě)URL可以確保所有瀏覽器中有效,但是簡(jiǎn)單易于實(shí)現(xiàn),但是重寫(xiě)URL也有缺點(diǎn):重寫(xiě)URL的頁(yè)面必須動(dòng)態(tài)生成;用戶(hù)數(shù)據(jù)暴露,易造成安全上的隱患;URL的長(zhǎng)度有限制,如使用URL傳遞大量數(shù)據(jù),會(huì)造成性能下降;必須對(duì)所有指向本W(wǎng)eb站點(diǎn)的URL進(jìn)行編碼;訪問(wèn)不方便,不能預(yù)先記錄訪問(wèn)頁(yè)面的URL。 Java Web程序設(shè)計(jì)312022-3-227.4 頁(yè)面間數(shù)據(jù)共享方式頁(yè)面間數(shù)據(jù)共享方式(2)共享session使用重寫(xiě)URL共享用戶(hù)數(shù)據(jù)時(shí),一個(gè)致命的限制就是兩個(gè)頁(yè)面間必須通過(guò)鏈接關(guān)聯(lián)起來(lái)。如
18、果兩個(gè)頁(yè)面之間不存在鏈接關(guān)系,將無(wú)法使用重寫(xiě)URL共享數(shù)據(jù)。此時(shí)可以使用共享會(huì)話的形式,即使用session內(nèi)置對(duì)象共享用戶(hù)數(shù)據(jù)。Java Web程序設(shè)計(jì)322022-3-227.4 頁(yè)面間數(shù)據(jù)共享方式頁(yè)面間數(shù)據(jù)共享方式HttpSession session = request.getSession(true);/設(shè)置會(huì)話有效期為20分鐘session.setMaxInactiveInterval(1200);/向會(huì)話中添加一個(gè)屬性名稱(chēng)為user,值為regUser的對(duì)象session.setAttribute(user, regUser);/獲取屬性名稱(chēng)為user的對(duì)象值,進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換U
19、ser user = (User)session.getAttribute(user);/從會(huì)話中刪除屬性名稱(chēng)為user的對(duì)象session.removeAttribute(user);Java Web程序設(shè)計(jì)332022-3-227.4 頁(yè)面間數(shù)據(jù)共享方式頁(yè)面間數(shù)據(jù)共享方式 使用session.setMaxInactiveInterval(int interval)方法設(shè)置會(huì)話的有效期(以秒為單位),會(huì)話的有效期默認(rèn)為30分鐘(在web.xml文件中配置)。 web.xml配置會(huì)話期: minutes Java Web程序設(shè)計(jì)342022-3-227.4 頁(yè)面間數(shù)據(jù)共享方式頁(yè)面間數(shù)據(jù)共享方式
20、(3)使用CookieCookie用于存儲(chǔ)Web服務(wù)器發(fā)送給客戶(hù)端的信息(通常以文本文件形式保存在客戶(hù)端)。當(dāng)客戶(hù)端第一次訪問(wèn)服務(wù)器時(shí),服務(wù)器為用戶(hù)創(chuàng)建一個(gè)Cookie對(duì)象,在響應(yīng)客戶(hù)端的同時(shí)把Cookie對(duì)象發(fā)送到客戶(hù)端。當(dāng)服務(wù)器端程序需要讀取Cookie時(shí),可再由request對(duì)象獲取Cookie中的數(shù)據(jù)。Cookie也是以“name/value”映射的形式保存數(shù)據(jù)的,這些信息可被封裝在Cookie對(duì)象中。當(dāng)客戶(hù)端第一次訪問(wèn)Web服務(wù)器時(shí),生成一組Cookie信息并保存在客戶(hù)端,可通過(guò)內(nèi)置對(duì)象response的addCookie()方法實(shí)現(xiàn)。Java Web程序設(shè)計(jì)352022-3-22第
21、一步:通過(guò)Cookie構(gòu)造方法創(chuàng)建Cookie對(duì)象。第二步:設(shè)置Cookie的最大保留時(shí)間。第三步:將Cookie對(duì)象添加到響應(yīng)對(duì)象中。第四步:得到客戶(hù)端發(fā)送過(guò)來(lái)的Cookie對(duì)象。 第五步:獲取Cookie 中數(shù)據(jù)的方法。7.4 頁(yè)面間數(shù)據(jù)共享方式頁(yè)面間數(shù)據(jù)共享方式cookie.setMaxAge(int value);/單位為秒 response.addCookie(Cookie obj); Cookie cookies = request.getCookies();/*此方法將返回一個(gè)Cookie數(shù)組 */cookie.getName();/得到Cookie中的鍵名, cookie.ge
22、tValue();/得到Cookie中的值。 Cookie cookie = new Cookie(String key ,Object value); Java Web程序設(shè)計(jì)362022-3-22第第7章章MVC與與DAO模式模式7.1 MVC框架模式簡(jiǎn)介7.2 在JSP中實(shí)現(xiàn)MVC框架模式7.3 請(qǐng)求轉(zhuǎn)發(fā)與重定向7.4 頁(yè)面間數(shù)據(jù)的共享方式7.5 DAO模式Java Web程序設(shè)計(jì)372022-3-227.5 DAO模式模式JDBC操作數(shù)據(jù)庫(kù),通常是通過(guò)在JSP頁(yè)面中寫(xiě)JDBC代碼或者借助于JavaBean實(shí)現(xiàn),這樣導(dǎo)致JSP頁(yè)面中包含大量的HTML代碼和Java代碼,顯示和功能代碼混合
23、在一起,難以維護(hù),程序可讀性也較差。DAO (Data Access Objects)設(shè)計(jì)模式是屬于Java EE數(shù)據(jù)層的操作,使用DAO設(shè)計(jì)模式可以簡(jiǎn)化大量的代碼編寫(xiě)和增加程序的可移植性。使用DAO設(shè)計(jì)模式時(shí),JSP頁(yè)面僅用來(lái)作表現(xiàn)層,即關(guān)注數(shù)據(jù)的顯示,不需要關(guān)注數(shù)據(jù)從何處而來(lái),如何獲取這些數(shù)據(jù)。Java Web程序設(shè)計(jì)382022-3-227.5 DAO模式模式 DAO設(shè)計(jì)模式封裝數(shù)據(jù)庫(kù)中表的全部操作,對(duì)業(yè)務(wù)層隱藏?cái)?shù)據(jù)訪問(wèn)的細(xì)節(jié),數(shù)據(jù)層僅為業(yè)務(wù)層提供數(shù)據(jù)庫(kù)操作的接口 DAO設(shè)計(jì)模式實(shí)現(xiàn)了業(yè)務(wù)層與數(shù)據(jù)層的分離,避免業(yè)務(wù)層和數(shù)據(jù)層的混雜,有利于項(xiàng)目后期的維護(hù)。 DAO的優(yōu)勢(shì) 數(shù)據(jù)存儲(chǔ)邏輯的分離
24、; 數(shù)據(jù)訪問(wèn)底層實(shí)現(xiàn)的分離 數(shù)據(jù)抽象Java Web程序設(shè)計(jì)392022-3-227.5 DAO模式模式 DAO模式對(duì)象圖Java Web程序設(shè)計(jì)402022-3-227.5 DAO模式模式 實(shí)現(xiàn)DAO的步驟在Java 應(yīng)用中實(shí)現(xiàn)DAO模式,主要分為5個(gè)模塊,具體如下。 VO類(lèi); DAO接口; DAO實(shí)現(xiàn)類(lèi); DAO工廠類(lèi); 數(shù)據(jù)庫(kù)連接類(lèi)。 Java Web程序設(shè)計(jì)412022-3-227.5 DAO模式模式(1)數(shù)據(jù)庫(kù)連接類(lèi)數(shù)據(jù)庫(kù)連接類(lèi)的主要功能是連接數(shù)據(jù)庫(kù)、關(guān)閉數(shù)據(jù)庫(kù)以及常見(jiàn)操作,如執(zhí)行SQL語(yǔ)句等。通過(guò)使用數(shù)據(jù)庫(kù)連接類(lèi),可以大大簡(jiǎn)便開(kāi)發(fā),在需要訪問(wèn)數(shù)據(jù)庫(kù)時(shí),只需調(diào)用該類(lèi)的相關(guān)方法即可,不
25、必再進(jìn)行大量地重復(fù)編碼工作。Java Web程序設(shè)計(jì)422022-3-22Java Web程序設(shè)計(jì)43數(shù)據(jù)庫(kù)連接類(lèi) public class DataBaseConnection private final String DBDRIVER = com.mysql.jdbc.Driver; private final String DBURL = jdbc:mysql:/localhost:3306/javaweb; private final String DBUSER = root; private final String DBPASSWORD = root; private Connec
26、tion conn = null; public DataBaseConnection() try Class.forName(DBDRIVER); conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); catch(Exception e) System.out.println(加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)失?。?; public Connection getConnection() return conn; public void close() try conn.close(); catch(SQLException e) System
27、.out.println(數(shù)據(jù)庫(kù)連接關(guān)閉失?。?; 2022-3-227.5 DAO模式模式(2) VO類(lèi)VO(Value Object)意為值對(duì)象,是一個(gè)屬性與表中字段一一對(duì)應(yīng)的類(lèi),有多少?gòu)埍?,就有多少個(gè)VO類(lèi)。VO類(lèi)包含setXxx()和getXxx()方法,用于設(shè)置與獲取屬性值。Java Web程序設(shè)計(jì)442022-3-227.5 DAO模式模式 VO類(lèi)示例 Public classs User private int userid; private String username; private String password; public int getUserid() retu
28、rn userid; public void setUserid(int userid) return userid; public String getUsername() return username; public void setUsername(String username) return username; public String getUserpassword() return userpassword; public void setUserid(String userpassword) return userpassword; Java Web程序設(shè)計(jì)452022-3
29、-227.5 DAO模式模式 DAO接口 DAO接口定義了全部的數(shù)據(jù)庫(kù)操作,即增刪改查,不過(guò)都是些抽象方法,需要子類(lèi)具體實(shí)現(xiàn)。Java Web程序設(shè)計(jì)package DB;import java.util.*;/定義數(shù)據(jù)庫(kù)操作方法定義數(shù)據(jù)庫(kù)操作方法public interface IUserDAO /增加操作增加操作public void insert(User user)throws Exception;/修改操作修改操作public void update(User user)throws Exception;/刪除操作刪除操作public void delete(int userid)t
30、hrows Exception;/按按ID查詢(xún)操作查詢(xún)操作public User queryById(int userid) throws Exception;/查詢(xún)?nèi)坎樵?xún)?nèi)縫ublic List queryAll() throws Exception;/模糊查詢(xún)模糊查詢(xún)public List queryByLike(String keyword) throws Exception;462022-3-227.5 DAO模式模式(3) DAO接口public interface IUserDAO public boolean login(String username,String pass
31、word);public int save(User user);public int delete(String username);public int update(String username,User user);public List findAll();public User findByUsername(String username);Java Web程序設(shè)計(jì)472022-3-227.5 DAO模式模式(4)DAO實(shí)現(xiàn)類(lèi)DAO實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)了DAO接口,并實(shí)現(xiàn)了DAO接口中所有抽象方法,完成數(shù)據(jù)庫(kù)操作。在DAO實(shí)現(xiàn)類(lèi)中設(shè)計(jì)SQL語(yǔ)句,并通過(guò)數(shù)據(jù)庫(kù)連接類(lèi)操作SQL語(yǔ)句,DAO實(shí)現(xiàn)
32、類(lèi)往往與具體的底層數(shù)據(jù)庫(kù)關(guān)系較為緊密。一個(gè)DAO實(shí)現(xiàn)類(lèi)對(duì)應(yīng)一張表。每個(gè)表都有一個(gè)DAO實(shí)現(xiàn)類(lèi),但是不包括數(shù)據(jù)庫(kù)的打開(kāi)和關(guān)閉。Java Web程序設(shè)計(jì)482022-3-227.5 DAO模式模式(4)DAO實(shí)現(xiàn)類(lèi)package DB;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import usebean.Person;/引入引入usebean下得下得Person類(lèi)類(lèi) /刪除操作刪除操作public class UserDA
33、OImpl implements IUserDAOpublic int delete(int userid) throws Exception int count=0;String sql=delete from user where userid=?;PreparedStatement pstmt=null;DataBaseConnection dbc=null;Java Web程序設(shè)計(jì)492022-3-227.5 DAO模式模式(4)DAO實(shí)現(xiàn)類(lèi)/下面是針對(duì)數(shù)據(jù)庫(kù)的操作下面是針對(duì)數(shù)據(jù)庫(kù)的操作try/連接數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù)dbc=new DataBaseConnection();pstmt=dbc.getConnection().prepareStatement(sql);pstmt.setInt(1, userid);/進(jìn)行數(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)物苗定價(jià)方案(3篇)
- 心理補(bǔ)償方案文案(3篇)
- 辦公行政費(fèi)用管理制度
- 學(xué)?;@球訓(xùn)練管理制度
- 公司隱患上報(bào)管理制度
- 小學(xué)衛(wèi)生健康管理制度
- 訴訟審計(jì)方案(3篇)
- 再次實(shí)施閉環(huán)管理制度
- 醫(yī)院非法集資管理制度
- DB62T 4482-2021 果園防雹網(wǎng)設(shè)計(jì)及架設(shè)技術(shù)規(guī)程
- 醫(yī)療健康產(chǎn)業(yè)的中醫(yī)師承人才培養(yǎng)模式
- 養(yǎng)牛場(chǎng)項(xiàng)目可行性研究報(bào)告
- 2025公需課《人工智能賦能制造業(yè)高質(zhì)量發(fā)展》試題及答案
- 2025年三級(jí)安全培訓(xùn)考試試題附參考答案【考試直接用】
- 宇宙起源與演化歷史探討
- 馬家灘鎮(zhèn)楊家圈灣村灘羊生態(tài)牧場(chǎng)基礎(chǔ)設(shè)施建設(shè)項(xiàng)目報(bào)告書(shū)
- 2024年高考江蘇卷生物試題解析版
- 基于BIM的建筑行業(yè)工程項(xiàng)目施工質(zhì)量管理與改進(jìn)報(bào)告
- 福建省莆田市2025屆高三下學(xué)期第四次教學(xué)質(zhì)量檢測(cè)試生物試題(含答案)
- 2025-2030中國(guó)連續(xù)油管行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025年安全生產(chǎn)月主題培訓(xùn)課件:如何查找身邊安全隱患
評(píng)論
0/150
提交評(píng)論