freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)論文基于javaeeweb應(yīng)用系統(tǒng)的解決方案-資料下載頁(yè)

2024-11-08 19:27本頁(yè)面

【導(dǎo)讀】J2EE平臺(tái)的成熟,為Web應(yīng)用程序更進(jìn)一步的發(fā)展提供了更廣闊的空間。上使用最為廣泛的應(yīng)用開發(fā)技術(shù)。作者結(jié)合了現(xiàn)有的Web框架技術(shù),Struts、Spring和iBATIS框架,與自己在。介紹了整個(gè)框架的設(shè)計(jì)、各種技術(shù)的選擇與優(yōu)劣性,還給出了當(dāng)前JavaEE開發(fā)中,并在適當(dāng)?shù)牡胤揭朐陂_發(fā)過(guò)程。中作者的總結(jié)與最佳實(shí)踐。成,提出基于JavaEE多層框架解決方案。以可伸縮性、透明性、高可用性和擴(kuò)展。性作為前提,從編程角度而言,對(duì)JavaEE編程中常見的問(wèn)題進(jìn)行了改善。本文首先從當(dāng)前JavaEE編程中,常常困擾廣大開發(fā)人員的問(wèn)題展開分析。層,持久層,數(shù)據(jù)訪問(wèn)層三個(gè)層次討論了該方案的具體設(shè)計(jì)與實(shí)現(xiàn)。紹了該方案中,各層的具體設(shè)計(jì)與實(shí)現(xiàn)。

  

【正文】 heck b) 調(diào)用 ***()實(shí)現(xiàn)相關(guān) check c) 調(diào)用 prepareExecute()處理業(yè)務(wù)中需要處理的邏輯 d) 調(diào)用自己的另一個(gè)被重載的 ()實(shí)現(xiàn)整合性 check e) 調(diào)用 execoute()實(shí)現(xiàn)真正的邏輯,進(jìn)行頁(yè)面轉(zhuǎn)向的 控制 f) 在業(yè)務(wù)邏輯執(zhí)行完畢后,調(diào)用 postExecute() 第四章 數(shù)據(jù)訪問(wèn)層 構(gòu)建應(yīng)用程序中,我們必須要解決的問(wèn)題是,如何得到應(yīng)用程序所需要的數(shù)據(jù)。除了命令行方式傳入的簡(jiǎn)單數(shù)據(jù),絕大部分應(yīng)用程序都需要通過(guò)某種數(shù)據(jù)存儲(chǔ)方式對(duì)數(shù)據(jù)持久化 [10]。而現(xiàn)在最常用和最方便的數(shù)據(jù)存儲(chǔ)方式是把數(shù)據(jù)存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)中。 即使選擇了最快和最可靠的數(shù)據(jù)庫(kù),我們也有可能因?yàn)榈土拥臄?shù)據(jù)庫(kù)訪問(wèn)層設(shè)計(jì)和實(shí)現(xiàn)而失去數(shù)據(jù)庫(kù)提供的速度和靈活性優(yōu)勢(shì)。因?yàn)閼?yīng)用程序頻繁地使用數(shù)據(jù)庫(kù)訪問(wèn)層,所以無(wú)論它的設(shè)計(jì)是多么的優(yōu)秀,在數(shù)據(jù)訪問(wèn)層出現(xiàn)的任何 不必要瓶頸都會(huì)對(duì)整個(gè)應(yīng)用程序造成影響 [10]。在本章節(jié)中,主要展示 Spring 簡(jiǎn)化 JDBC編寫的數(shù)據(jù)訪問(wèn)代碼。首先我們看一下,沒有使用 Spring 時(shí), JDBC代碼存在的問(wèn)題。而以通過(guò)使用 Spring,我們僅僅需要編寫少量的代碼就可以充分發(fā)揮與手工編寫的 SQL等同的威力。在本章中,將對(duì)下面這些問(wèn)題進(jìn)行詳細(xì)的討論。 傳統(tǒng) JDBC 代碼的問(wèn)題 實(shí)踐中的數(shù)據(jù)訪問(wèn)技術(shù) Data Access Layer 設(shè)計(jì)方案 JDBC 代碼的問(wèn)題 JDBC 是 Java應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)解決方案(途徑)。 JDBC 底層的 結(jié)構(gòu)的核心設(shè)計(jì)是為不同的數(shù)據(jù)庫(kù)提供不同的驅(qū)動(dòng)程序;這些驅(qū)動(dòng)程序運(yùn)行 JAVA代碼訪問(wèn)這個(gè)數(shù)據(jù)庫(kù)。 從 Java 開發(fā)就已經(jīng)加入了 JDBC API, 用于以基于 SQL 的方式訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù) , 這種做法對(duì)于如今的很多應(yīng)用程序仍舊適用。 JDBC 能夠以很高的性能執(zhí)行基于數(shù)據(jù)集的操作,這種時(shí)候 SQL 非常強(qiáng)大而且易用。 JDBC 的目標(biāo)不是要給關(guān)系型數(shù)據(jù)提供一個(gè)面向?qū)ο蟮囊晥D,也不會(huì)犧牲目標(biāo)數(shù)據(jù)庫(kù)專有的強(qiáng)大功能。 可惜的是, JDBC 是一個(gè)低級(jí)的 API,直接使用它會(huì)相當(dāng)麻煩 [3]: ? 開發(fā)者需要處理大量復(fù)雜的任務(wù)和基礎(chǔ)結(jié)構(gòu), 例如必須用大量容易出錯(cuò)的try/catch/finally/try/catch 代碼塊來(lái)確保資源和異常得到很好的處理。 ? 應(yīng)用程序需要復(fù)雜的錯(cuò)誤處理以確定連接在使用后被正確關(guān)閉,這樣以來(lái)使得代碼變得冗長(zhǎng),膨脹,并且重復(fù)。 ? JDBC 中使用了極不明確性的 SQLException 異常。 ? JDBC 沒有引入具體的異常子類層次機(jī)制。 相應(yīng)于任何一種錯(cuò)誤,都只是拋出 SQLException 異常 無(wú)論它來(lái)源于 JDBC驅(qū)動(dòng)程序還是來(lái)源于數(shù)據(jù)庫(kù),這使得程序員很難理解到底是哪里實(shí)際出現(xiàn)了錯(cuò)誤。例如,如果 SQL 對(duì)象是無(wú)效的或已經(jīng)被鎖定 ,那么將拋出一個(gè) SQLException異常。調(diào)試這樣的異常需要一定的時(shí)間來(lái)檢查 SQL狀態(tài)值和錯(cuò)誤代碼。更有甚者,SQL狀態(tài)值和錯(cuò)誤代碼的含義在各種數(shù)據(jù)庫(kù)之間都有些差別。 更讓大多數(shù)開發(fā)人員頭疼的是,編寫 JDBC 代碼并不是一項(xiàng)容易的工作 ——存在大量的重復(fù)性的工作。在大多數(shù) Java項(xiàng)目中,大部分代碼都是樣板代碼。異常處理就屬于此類代碼。即使業(yè)務(wù)邏輯只有 3到 4行代碼,用于異常處理的代碼也要占 10 到 20 行。 在 JDBC 的發(fā)展歷程中 ,有一件事從來(lái)沒有改變過(guò) :使用 JDBC API 是一件煩人的事,直接使用 JDBC API來(lái)執(zhí)行哪怕一條簡(jiǎn)單的更新語(yǔ)句,也需要寫上半頁(yè)代碼才能保證資源管理和異常處理的正確性; JDBC 框架非常復(fù)雜和難于測(cè)試;而這些復(fù)雜性為開發(fā)制造了很多困難。第一層復(fù)雜性是代碼是否能有效地管理數(shù)據(jù)庫(kù)連接。每一個(gè)數(shù)據(jù)庫(kù)連接都是很緊缺的資源,并且建立到數(shù)據(jù)庫(kù)的連接需要不小的系統(tǒng)開銷。通常,數(shù)據(jù)庫(kù)為每一個(gè)連接創(chuàng)建一個(gè)線程或者子進(jìn)程。此外,同時(shí)連接到數(shù)據(jù)庫(kù)的連接數(shù)通常是受限的。打開過(guò)量的數(shù)據(jù)庫(kù)連接會(huì)大大減慢數(shù)據(jù)庫(kù)的執(zhí)行效率和反應(yīng)速度。 實(shí)踐中的數(shù)據(jù)訪問(wèn)技術(shù) 當(dāng)前的 ORM架構(gòu)有兩種基礎(chǔ)類型。第一種允許我們完全控 制 SQL 語(yǔ)句( SQL statement),而我們必須保證這些 SQL 語(yǔ)句選擇了正確的表字段。第二種屬于ORM工具類型,這類工具的 SQL 語(yǔ)句由 ORM架構(gòu)自動(dòng)生成 [10]。在這種架構(gòu)下,因你我們僅僅需要完成映射文件,而由 ORM 架構(gòu)來(lái)負(fù)責(zé)數(shù)據(jù)庫(kù)運(yùn)行和正確地處理這些結(jié)果。 Hibernate 簡(jiǎn)介 ? 什么是 Hibernate Hibernate 是一個(gè)對(duì)象關(guān)系映射和持久性框架,它屬于第二種 ORM 工具類型。 Hibernate 同樣允許我們指定查詢時(shí)使用的 SQL 方言( dialect)。這樣的結(jié)果是: Hibernate 可以為我們正在使用的特定數(shù)據(jù)庫(kù)定制生成適合這個(gè)數(shù)據(jù)庫(kù)的查詢語(yǔ)句。 SQL方言將對(duì)連接( joins)、 limit/top 子句及許多其它數(shù)據(jù)庫(kù)特定 SQL特性進(jìn)行管理。 Hibernate 提供了許多高級(jí)特性,從內(nèi)省到多態(tài)和繼承映射。最有用的特性之一是允許你定義自己的持久化枚舉值類型(繼承指定接口的 Java 類)這將幫助我們實(shí)現(xiàn)對(duì)象規(guī)范化( object canonicalization) , 這些規(guī)范將給我們的應(yīng)用相當(dāng)大的性能提升。 ? 概述 Hibernate 是一個(gè)純 Java 的對(duì)象關(guān)系映射和持久性框架,它允許 您用 XML 配置文件把普通 Java 對(duì)象映射到關(guān)系數(shù)據(jù)庫(kù)表。使用 Hibernate 能夠節(jié)約大量項(xiàng)目開發(fā)時(shí)間,因?yàn)檎麄€(gè) JDBC 層都由這個(gè)框架管理。這意味著我們把應(yīng)用程序的數(shù)據(jù)訪問(wèn)層位于 Hibernate 之上,完全是從底層數(shù)據(jù)模型中抽象出來(lái)的。 比起其他類似的對(duì)象關(guān)系映射技術(shù)( JDO、實(shí)體 bean、內(nèi)部開發(fā)等),Hibernate 有許多優(yōu)勢(shì):它是免費(fèi)的、開源的,已經(jīng)成熟到良好的程度,并得到廣泛應(yīng)用,而且還有一個(gè)非?;钴S的社區(qū)論壇。 要把 Hibernate 集成到現(xiàn)有的 Java 項(xiàng)目, 則需要執(zhí)行以下步驟: 1. 從 Hibernate 的 Web 站點(diǎn)下載 Hibernate 框架的最新發(fā)行版 2. 把必需的 Hibernate 庫(kù)( JAR 文件)復(fù)制到應(yīng)用程序的 CLASSPATH。 3. 創(chuàng)建 XML 配置文件,用它把 Java 對(duì)象映射到數(shù)據(jù)庫(kù)表。 4. 把 XML 配置文件復(fù)制到應(yīng)用程序的 CLASSPATH。 ? Hibernate 查詢語(yǔ)言( HQL) Hibernate 提供了一個(gè)查詢語(yǔ)言,叫作 Hibernate 查詢語(yǔ)言( HQL),它與 SQL 很相似。 HQL 用起來(lái)相當(dāng)簡(jiǎn)單。所有的關(guān)鍵字都與 SQL 中的關(guān)鍵字類似,例如 SELECT、 FROM 和 WHERE。 HQL 與 SQL 的差異在于,我們不用針對(duì)數(shù)據(jù)模型(即針對(duì)表和列等)直接編寫查詢,而是應(yīng)該針對(duì) Java 對(duì)象,使用 Java 對(duì)象的屬性和關(guān)系編寫查詢。 HQL 還是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,因?yàn)樗峁┝藢?duì)多態(tài)的支持。 HQL 語(yǔ)言最困難的部分是我們必須習(xí)慣使用類(在映射文件中定義了映射關(guān)系的類)來(lái)選擇數(shù)據(jù)。我們必須寫 select t from Test as t 來(lái)從 Test 表中選擇所有行,而不是select * from Test。在這時(shí)候 , Test 代表的適合 Test 業(yè)務(wù)域?qū)ο蟆6皇荰est 表。 ? XML 配置文件 功能的核心在于 XML 配置文件。這些文件必須存在于應(yīng)用程序的 CLASSPATH 中。我們要研究的第一個(gè)文件是 。它包含與數(shù)據(jù)源有關(guān)的信息(數(shù)據(jù)庫(kù) URL、模式名稱、用戶名、口令等),以及對(duì)包含映射信息的其他配置文件的引用。 其余的 XML 文件允許您把 Java 類映射到數(shù)據(jù)庫(kù)表。稍后我再深入介紹這些文件,但重要的是要清楚它們的文件名要遵守 這個(gè)模式。 ? 為什么選擇 Hibernate 使用 Hibernate就如同使用其它任何一個(gè) RAD工具一樣簡(jiǎn)單。在實(shí)際應(yīng)用中,我們可以通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)相關(guān)功能。無(wú)論如何,如果我們想要完全控制應(yīng)用的數(shù)據(jù)訪問(wèn)層,會(huì)發(fā)現(xiàn) Hibernate 簡(jiǎn)單也非常慢。這并不是框架本身的錯(cuò)誤,它僅僅是因?yàn)?,有時(shí)候,根據(jù)映射文件來(lái)查詢并構(gòu)建對(duì)象雖然簡(jiǎn)單,但是非常復(fù)雜?;蛟S Hibernate 最差的地方不允許用戶輕松控制如何查詢數(shù)據(jù),并且有一些查詢的效率非常低下。特別是在進(jìn)行 1: N和 M: N查詢的時(shí)候,查詢更加復(fù)雜 [10]。如果不想寫臟亂的 JDBC代碼,想對(duì)對(duì)象創(chuàng)建和 SQL 代碼施加更多的控制,可以考慮使用 iBATIS。 iBATIS 簡(jiǎn)介 iBATIS 代表了本節(jié)引言介紹的第二種 ORM 工具。它允許開發(fā)者自定義 SQL來(lái)組配 bean 的屬性值。 iBATIS允許我們使用數(shù)據(jù)庫(kù)對(duì)標(biāo)準(zhǔn)的 SQL語(yǔ)法進(jìn)行擴(kuò)展。另外 , iBATIS 使用 XML映射文件,我們可以為不同的數(shù)據(jù)庫(kù)分別配置相應(yīng)的映射文件。這與使用存儲(chǔ)過(guò)程所能獲得的抽象層次類似 [11]。 ? 概述 iBATIS 在 SQL 層面上進(jìn)行持久化操作,但將使用 JDBC 的細(xì)節(jié)全部抽象隔離開來(lái),這就是 iBATIS SQL 映射。 iBATIS 的創(chuàng)意非常簡(jiǎn)單: SQL 語(yǔ)句在 XML文件中定義,并預(yù)留參數(shù)占位符(可以指定參數(shù)的 SQL類型和其他細(xì)節(jié))。在執(zhí)行時(shí),占位符將被指定的參數(shù)值所取代,參數(shù)可能來(lái)自參數(shù)映射表, JavaBean 屬性或是簡(jiǎn)單的參數(shù)對(duì)象。在執(zhí)行 SQL 查詢時(shí),結(jié)果字段將初映射到對(duì)象,映射的方式與參數(shù)映射是一樣的。 除了直接的語(yǔ)句映射之外, SQL映射還可以緩存查詢結(jié)果,緩存策略也是可接插的。 iBATIS 提供了幾種現(xiàn)成的緩存實(shí)現(xiàn),包括默認(rèn)的內(nèi)存緩存和使用OpenSymphony OSCache 的緩存策略。緩存模型是針對(duì)每 個(gè)查詢語(yǔ)句分別指定的。并且可以指定哪些插入 /更新 /刪除語(yǔ)免應(yīng)該導(dǎo)致刷新特定緩存(比如說(shuō),如果執(zhí)行了 update 語(yǔ)句,就應(yīng)該刷新緩存)。但 iBATIS 不允許將特定的對(duì)象實(shí)例清除出緩存,也就是說(shuō),即使只有一個(gè)對(duì)象被更新,也必須將所有的實(shí)例清出緩存。 ? 基本架構(gòu)和配置 在 iBATIS 的配置和映射文件中,一個(gè)中央 XML 文件包含了對(duì)那些定義了Java beans 和所有數(shù)據(jù)庫(kù)操作的映射文件的引用。當(dāng)在 Spring 中創(chuàng)建一個(gè)iBATIS bean 實(shí)例時(shí),我們可以指定這個(gè)參考配置文件的位置。這個(gè)映射文件通常代表一個(gè)域?qū)ο?和合適的 SQL 代碼用來(lái)持久化該對(duì)象的數(shù)據(jù)到數(shù)據(jù)庫(kù)。所有的映射文件都是啟動(dòng)時(shí)加載進(jìn)來(lái)的。并且所有映射都針對(duì)實(shí)際的對(duì)象做了校驗(yàn)。如果一個(gè)屬性不存在于一個(gè)對(duì)象上,這個(gè) bean 的創(chuàng)建就失敗。 不像單獨(dú)的 iBATIS應(yīng)用,在 Spring唯一要配置的就是參考文件和映射文件。Spring 的 iBATIS 工廠 bean()負(fù)責(zé)加載所有的配置文件。下圖為映射文件結(jié)構(gòu)的概覽 [12]。 圖 ? 為什么選擇 iBATIS 與高級(jí)透明持久化相比, SQL層面上的映射有以下優(yōu)點(diǎn): 保持了 SQL的全部能力,可以完全掌握相關(guān)語(yǔ)句的一切細(xì)節(jié)。 可以使用基于數(shù)據(jù)集的更新的刪除高效地處理多行數(shù)據(jù)。 可以毫無(wú)限制在使用統(tǒng)計(jì)函數(shù)(例如 avg, sum,max 和 count 等)。 可以很輕松地將領(lǐng)域?qū)ο笥成涞蕉鄰埍淼淖侄危梢允褂萌魏瘟6鹊挠成?。然而,?yīng)用程序中的數(shù)據(jù)訪問(wèn)代碼仍然需要做這些事: 顯式更新被修改的對(duì)象,跟蹤可能發(fā)生的修改,并管理對(duì)象之間的關(guān)聯(lián)。 將應(yīng)用層面的值轉(zhuǎn)換成數(shù)據(jù)庫(kù)兼容的值,比如說(shuō) boolean 和日期都需要轉(zhuǎn)換。 完善的透明持久化工具(如 Hibernate)都允許在一個(gè)更方便的層面上管理持久對(duì)象,也允許更為復(fù)雜的類型映射 —— 但也會(huì)給領(lǐng)域模型和數(shù)據(jù)模型雙方都增限制。 iBATIS SQL 映射是一種很有吸引力的關(guān)系數(shù)據(jù)庫(kù)訪問(wèn)途徑,它以聲明性的方式定義 SQL 語(yǔ)句,并且允許基于數(shù)據(jù)集的訪問(wèn)。從簡(jiǎn)單的值到 JavaBean 它都可以映射。與 Hibernate 不同, SQL映射不是那么復(fù)雜。 SQL映射只是借助簡(jiǎn)便的“語(yǔ)句映射”來(lái)進(jìn)行 SQL 層面上的工作 —— 很適合用于實(shí)現(xiàn)簡(jiǎn)單的需求,以及需要充分控制數(shù)據(jù)庫(kù)訪問(wèn)的業(yè)務(wù)。 ? 性能 iBATIS 的性能非常好。因?yàn)?iBATIS 允許在 sqlMap 文件中寫自己的 SQL 語(yǔ)句,可以自由使用所用數(shù)據(jù)庫(kù)的額外特性。對(duì) select 到字段的數(shù)據(jù)也擁有完全的控制。 iBATIS 最重要的優(yōu)點(diǎn)就是它不生成任何代碼。因此,開發(fā)人員沒有數(shù)據(jù)語(yǔ)言需要學(xué)習(xí)。也不需要轉(zhuǎn)換到數(shù)據(jù)庫(kù)的 SQL代碼。這允許我們使用數(shù)據(jù)庫(kù)地SQL主義提供的非標(biāo)準(zhǔn)擴(kuò)展。 Bean 配置放置在單獨(dú) XML文件也使得我們可以保持代碼的易于管理。實(shí)際的數(shù)據(jù)操作非常簡(jiǎn)單;內(nèi)置類型允許我們?yōu)閿?shù)據(jù)庫(kù)操作傳入幾乎任何參數(shù)。 數(shù)據(jù)訪問(wèn)層設(shè)計(jì) Data Access Layer 設(shè)計(jì)方案 對(duì)大多數(shù)的應(yīng)用程序來(lái)說(shuō),對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),讀取,快速可靠的操作顯的尤為重要。我們?nèi)绻麑?shù)據(jù)訪問(wèn)代碼內(nèi)嵌于 JSP 頁(yè)面中,無(wú)疑為我們?cè)黾诱{(diào)試與調(diào)試難度。而將數(shù)據(jù)存儲(chǔ)邏輯封裝在一系列定義清晰的接口,這會(huì)使得開發(fā)者的工作輕松自如,也更是優(yōu)良設(shè)計(jì)
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1