電子教案-輕量級Java-Web整合開發(fā)入門_第1頁
電子教案-輕量級Java-Web整合開發(fā)入門_第2頁
電子教案-輕量級Java-Web整合開發(fā)入門_第3頁
電子教案-輕量級Java-Web整合開發(fā)入門_第4頁
電子教案-輕量級Java-Web整合開發(fā)入門_第5頁
已閱讀5頁,還剩397頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

SSH框架概述課程介紹------課程概述本門課程的實(shí)踐操作性較強(qiáng),主要鍛煉學(xué)生的綜合實(shí)踐能力;在實(shí)際的JavaEE平臺中,使用Struts2+Spring+Hibernate進(jìn)行整合開發(fā)是最為流行的開發(fā)平臺,這種開發(fā)平臺也被稱為輕量級JavaEE企業(yè)應(yīng)用平臺。課程介紹------課程作用綜合以前所學(xué)知識,運(yùn)用到實(shí)際中在畢業(yè)時(shí)有一個(gè)高起點(diǎn),找個(gè)好工作JOB招聘信息截圖招聘信息截圖招聘信息截圖招聘信息截圖課程介紹------課程定位前導(dǎo)課程后續(xù)課程java程序設(shè)計(jì)數(shù)據(jù)庫原理html課程JSP課程數(shù)據(jù)結(jié)構(gòu)XMLSSH框架本課程J2EE程序設(shè)計(jì)課程介紹------課程目標(biāo)、簡介能夠熟練運(yùn)用當(dāng)前流行的java開源框架:Struts、Hibernate以及Spring來構(gòu)建靈活、易于擴(kuò)展的多層Web應(yīng)用程序。課程介紹------課程目標(biāo)、簡介Struts簡介Struts是Apache軟件基金會(ASF)贊助的一個(gè)開源項(xiàng)目。它最初是Jakarta項(xiàng)目中的一個(gè)子項(xiàng)目struts流程,并在2004年3月成為ASF的頂級項(xiàng)目。它通過采用JavaServlet/JSP技術(shù),實(shí)現(xiàn)了基于JavaEEWeb應(yīng)用的MVC設(shè)計(jì)模式的應(yīng)用框架,是MVC經(jīng)典設(shè)計(jì)模式中的一個(gè)經(jīng)典產(chǎn)品。分為Struts1和Struts2,本課程主要講解Struts2。Struts簡介Struts只是一個(gè)MVC框架(Framework),用于快速開發(fā)JavaWeb應(yīng)用。Struts實(shí)現(xiàn)的重點(diǎn)在C(Controller),包括ActionServlet/RequestProcessor和定制的Action;也為V(View)提供了一系列定制標(biāo)簽(CustomTag)。Struts幾乎沒有涉及M(Model),所以Struts可以采用JAVA實(shí)現(xiàn)的任何形式的商業(yè)邏輯。Spring簡介Spring是一個(gè)輕型容器(light-weightcontainer),其核心是Bean工廠(BeanFactory),用以構(gòu)造我們所需要的M(Model)。Spring框架是一個(gè)分層架構(gòu),由7個(gè)定義良好的模塊組成。Spring模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方式。Spring簡介在此基礎(chǔ)之上,Spring提供了AOP(Aspect-OrientedProgramming,面向?qū)用娴木幊蹋┑膶?shí)現(xiàn),用它來提供非管理環(huán)境下申明方式的事務(wù)、安全等服務(wù);對Bean工廠的擴(kuò)展ApplicationContext更加方便我們實(shí)現(xiàn)J2EE的應(yīng)用;DAO/ORM的實(shí)現(xiàn)方便我們進(jìn)行數(shù)據(jù)庫的開發(fā);WebMVC和SpringWeb提供了JavaWeb應(yīng)用的框架或與其他流行的Web框架進(jìn)行集成。Spring簡介Hibernate簡介Hibernate是一個(gè)開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。

Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。Hibernate簡介Hibernate的核心接口一共有5個(gè),分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個(gè)核心接口在任何開發(fā)中都會用到。通過這些接口,不僅可以對持久化對象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。下面對這五個(gè)核心接口分別加以介紹。Hibernate簡介課程介紹---SSH整合項(xiàng)目演示參考資料Struts官網(wǎng)Hibernate官網(wǎng)Spring官網(wǎng)各種相關(guān)論壇、網(wǎng)上資料教材內(nèi)容介紹基礎(chǔ)知識(前提)整合開發(fā)(SSH)應(yīng)用實(shí)踐(實(shí)踐)學(xué)習(xí)方法理解框架的原理;課后多實(shí)踐練習(xí);充分利用網(wǎng)絡(luò)資源;有問題多和老師、同學(xué)討論;在實(shí)際項(xiàng)目中掌握SSH框架。實(shí)踐總結(jié)再實(shí)踐輕量級JavaWeb開發(fā)概述第1講輕量級JavaWeb開發(fā)概述了解JavaWeb開發(fā)基礎(chǔ)知識掌握常用JavaWeb服務(wù)器用法了解開發(fā)相關(guān)技術(shù)掌握J(rèn)avaWeb項(xiàng)目的部署課程目標(biāo)目錄1.1Java概述1.2JavaWeb開發(fā)概述1.3常用的JavaWeb服務(wù)器1.4輕量級JavaWeb開發(fā)環(huán)境1.5輕量級JavaWeb開發(fā)相關(guān)技術(shù)1.6JavaWeb項(xiàng)目的部署Java概述SunMicrosystems公司于1995年5月推出的一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。運(yùn)行Java程序必須先安裝JDKJava分為三個(gè)開發(fā)體系:J2SE:Java2PlatformStandardEdition,主要開發(fā)桌面Application應(yīng)用程序。J2EE:Java2Platform,EnterpriseEdition,主要開發(fā)企業(yè)級的Web應(yīng)用程序。J2ME:Java2PlatformMicroEdition,主要開發(fā)嵌入式設(shè)備的應(yīng)用程序。目錄1.1Java概述1.2JavaWeb開發(fā)概述1.3常用的JavaWeb服務(wù)器1.4輕量級JavaWeb開發(fā)環(huán)境1.5輕量級JavaWeb開發(fā)相關(guān)技術(shù)1.6JavaWeb項(xiàng)目的部署JavaWeb項(xiàng)目的基本結(jié)構(gòu)1.手動建立一個(gè)JavaWeb項(xiàng)目2.手動部署該JavaWeb項(xiàng)目3.測試該JavaWeb項(xiàng)目的運(yùn)行4.查看該JavaWeb項(xiàng)目的運(yùn)行原理輕量級JavaWeb開發(fā)概述輕量級,是指該組件或框架啟動時(shí)依賴的資源較少,系統(tǒng)消耗較小,是一種相對的說法。一般說的輕量級JavaWeb開發(fā),主要是指使用Struts2、Hibernate和Spring這三個(gè)框架整合開發(fā)的Web項(xiàng)目開發(fā)模式,也就是本書所講的SSH框架開發(fā)。經(jīng)典JavaWeb開發(fā)概述重量級,是指該組件或框架啟動時(shí)依賴的資源較多,系統(tǒng)消耗較大,也是一種相對的說法。通常說的經(jīng)典JavaWeb開發(fā),是指使用JSF+JPA+EJB這三個(gè)框架進(jìn)行的開發(fā)。目錄1.1Java概述1.2JavaWeb開發(fā)概述1.3常用的JavaWeb服務(wù)器1.4輕量級JavaWeb開發(fā)環(huán)境1.5輕量級JavaWeb開發(fā)相關(guān)技術(shù)1.6JavaWeb項(xiàng)目的部署常用JavaEE服務(wù)器Tomcat:和java結(jié)合最好,Sun推薦Jetty:可作為嵌入式服務(wù)器Resin:目前最快的JSP、Serverlet運(yùn)行平臺Jboss:支持EJB3.0,常與Tomcat和Jetty綁定WebLogic和WebSphere:專業(yè)JavaEE服務(wù)器安裝Tomcat服務(wù)器下載Tomcat合適的版本;解壓縮下載的zip文件;將解壓縮后文件夾放在任意路徑下;設(shè)置Tomcat所需的環(huán)境變量;啟動Tomcat(雙擊安裝路徑下bin目錄中的startup.bat文件)。配置Tomcat服務(wù)器的端口Tomcat的默認(rèn)端口:8080演示修改端口。進(jìn)入Tomcat的控制臺Status控制器Manager控制器部署Web應(yīng)用有不同的部署方法;WAR(WebArchivefile)是網(wǎng)絡(luò)應(yīng)用程序文件是與平臺無關(guān)的文件格式,它允許將許多文件組合成一個(gè)壓縮文件。直接將相應(yīng)文件拷貝到webapps目下。Jetty的下載和安裝Jetty是一個(gè)開源的servlet容器,它為基于Java的web內(nèi)容,例如JSP和servlet提供運(yùn)行環(huán)境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發(fā)布。開發(fā)人員可以將Jetty容器實(shí)例化成一個(gè)對象,可以迅速為一些獨(dú)立運(yùn)行(stand-alone)的Java應(yīng)用提供網(wǎng)絡(luò)和web連接。Jetty的啟動目錄1.1Java概述1.2JavaWeb開發(fā)概述1.3常用的JavaWeb服務(wù)器1.4輕量級JavaWeb開發(fā)環(huán)境1.5輕量級JavaWeb開發(fā)相關(guān)技術(shù)1.6JavaWeb項(xiàng)目的部署環(huán)境變量的配置JAVA_HOMECLASSPATH常用的集成開發(fā)環(huán)境MyEclipseNetBeans目錄1.1Java概述1.2JavaWeb開發(fā)概述1.3常用的JavaWeb服務(wù)器1.4輕量級JavaWeb開發(fā)環(huán)境1.5輕量級JavaWeb開發(fā)相關(guān)技術(shù)1.6JavaWeb項(xiàng)目的部署JSP技術(shù)簡介JSP原理JSP內(nèi)置對象(9個(gè))JSP編譯指令(3個(gè))JSP動作指令(7個(gè))數(shù)據(jù)庫技術(shù)簡介MysqlSQLServerOracleDB2配置文件格式XML格式Annotation格式其他AntMavenSvn目錄1.1Java概述1.2JavaWeb開發(fā)概述1.3常用的JavaWeb服務(wù)器1.4輕量級JavaWeb開發(fā)環(huán)境1.5輕量級JavaWeb開發(fā)相關(guān)技術(shù)1.6JavaWeb項(xiàng)目的部署JavaWeb項(xiàng)目的部署拷貝部署法war包部署法IDE部署法End設(shè)計(jì)模式概述第2講設(shè)計(jì)模式概述掌握MVC模型了解常用設(shè)計(jì)模式課程目標(biāo)目錄1單例模式2工廠模式3代理模式4命令模式5策略模式6

MVC單例模式單例模式又叫做單態(tài)模式或者單件模式,是設(shè)計(jì)模式中使用很頻繁的一種模式,在各種開源框架、應(yīng)用系統(tǒng)中多有應(yīng)用。單例模式中的“單例”通常用來代表那些本質(zhì)上具有唯一性的系統(tǒng)組件(或者叫做資源)。目錄1單例模式2工廠模式3代理模式4命令模式5策略模式6

MVC工廠模式工廠模式在《Java與模式》中分為三類:1.簡單工廠模式2.工廠方法模式3.抽象工廠模式簡單工廠模式簡單工廠模式又稱為靜態(tài)工廠方法模式,它屬于創(chuàng)建型模式。在簡單工廠模式中,可以根據(jù)自變量的不同返回不同類的實(shí)例。簡單工廠模式專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類。工廠方法模式工廠方法模式去掉了簡單工廠模式中工廠方法的靜態(tài)屬性,使得它可以被子類繼承。這樣在簡單工廠模式里集中在工廠方法上的壓力可以由工廠方法模式里不同的工廠子類來分類。抽象工廠模式抽象工廠模式的用意是為客戶端提供一個(gè)接口,可以創(chuàng)建多個(gè)產(chǎn)品族(指位于不同產(chǎn)品等級結(jié)構(gòu)中功能相關(guān)聯(lián)的產(chǎn)品組成的家族)中的產(chǎn)品對象。目錄1單例模式2工廠模式3代理模式4命令模式5策略模式6

MVC代理模式為其他對象提供一種代理以控制這個(gè)對象的訪問。簡單來說就是在一些情況下客戶不想或者不能直接引用一個(gè)對象,而代理對象可以在客戶和目標(biāo)對象之間起到中介作用,去掉客戶不能看到的內(nèi)容和服務(wù)或者增添客戶需要的額外服務(wù)。目錄1單例模式2工廠模式3代理模式4命令模式5策略模式6

MVC命令模式將一個(gè)請求封裝為一個(gè)對象,從而使你可用不同的請求對客戶進(jìn)行參數(shù)化;對請求排隊(duì)或記錄請求日志,以及支持可撤銷的操作。目錄1單例模式2工廠模式3代理模式4命令模式5策略模式6

MVC策略模式策略模式屬于對象行為型設(shè)計(jì)模式,主要是定義一系列的算法,把這些算法一個(gè)個(gè)封裝成擁有共同接口的單獨(dú)類,并且使他們之間可以互換。策略模式讓算法獨(dú)立于使用它的客戶而變化,也稱為政策模式。策略模式是一種對象行為型模式。目錄1單例模式2工廠模式3代理模式4命令模式5策略模式6

MVCModel1和Model2Model1Model2MVC模式MVC思想及其優(yōu)勢MVC思想是Web項(xiàng)目的普遍模式更符合軟件工程思想更利于后期的維護(hù)EndStruts2框架第3講Struts2框架會下載和安裝Struts2掌握Struts2的基礎(chǔ)支持掌握Struts2的標(biāo)簽庫了解Struts2的高級應(yīng)用課程目標(biāo)目錄1Struts2框架概述2Struts2框架的基本用法3Struts2框架的標(biāo)簽庫4Struts2框架的高級應(yīng)用5本講小結(jié)Struts項(xiàng)目簡介Apache基金會Jakarta項(xiàng)目組的一個(gè)開源項(xiàng)目,采用MVC模式;主要技術(shù):Servlet+JSP技術(shù)優(yōu)點(diǎn):標(biāo)簽庫+頁面導(dǎo)航Struts2的由來Struts+WebWork=Struts2Struts2中WebWork占的比重更多些Struts2的優(yōu)勢集中了MVC領(lǐng)域最強(qiáng)大的兩個(gè)社區(qū)的力量,其技術(shù)水平可謂絕無僅有;國內(nèi)Java領(lǐng)域龐大的用戶數(shù)量支撐,影響力巨大;發(fā)展已久,較為成熟。下載與安裝Struts2/release/2.3.x/index.html部署Struts2自帶的例子發(fā)布Struts2自帶的例子Struts2執(zhí)行的流程圖目錄1Struts2框架概述2Struts2框架的基本用法3Struts2框架的標(biāo)簽庫4Struts2框架的高級應(yīng)用5本講小結(jié)Struts2應(yīng)用的開發(fā)步驟添加Struts的8個(gè)jar包(2.3.16)在web.xml文件中定義filter編寫視圖資源,jsp文件定義處理用戶請求的Action類在struts.xml文件中配置Action類配置處理結(jié)果和物理視圖資源之間的關(guān)系Struts2的處理流程瀏覽器發(fā)送一個(gè)請求。核心控制器FilterDispatcher根據(jù)請求決定調(diào)用合適的Action。WebWork的攔截器鏈自動對請求應(yīng)用通用功能,如驗(yàn)證等。回調(diào)Action的execute方法,該execute方法根據(jù)請求的參數(shù)來執(zhí)行一定的操作。Action的execute方法處理結(jié)果信息將被輸出到瀏覽器中,支持多種形式的視圖。Struts2框架的Action接口對于Struts2應(yīng)用的開發(fā)者而言,Action才是應(yīng)用的核心,開發(fā)者需要提供大量的Action類,并在struts.xml文件中配置Action映射關(guān)系。Action類里包含了對用戶請求的邏輯處理,所以Action類也被稱為業(yè)務(wù)控制器。對于開發(fā)者來說,可以在自定義的Action類里面對上述Action接口進(jìn)行實(shí)現(xiàn),或者直接繼承系統(tǒng)已經(jīng)封裝好的一個(gè)類----ActionSupport。Struts2框架的配置文件web.xmlstruts.xmlStruts2的常量配置通常使用struts.properties文件管理常量該文件定義系列的key-value對如:name=張三注意struts.properties文件的路徑通常放在web應(yīng)用的WEB-INF/classes下常用的常量介紹Struts.i18n.encodingStruts.ui.theme其他常量93Struts2的常量配置Struts2配置常量共有三種方式:通過struts.properties文件通過struts.xml文件通過Web應(yīng)用的web.xml文件Struts2框架按照如下搜索順序加載常量struts-default.xmlstruts-plugin.xmlstruts.xmlstruts.propertiesweb.xmlStruts2的配置文件介紹perties:定義框架自身的全局變量。struts-default.xml:定義框架自身使用的action映射及result定義。struts-plugin.xml:struts插件使用的配置文件,比如當(dāng)使用struts和spring結(jié)合時(shí)就需要在web.xml中引用該配置文件。struts.xml:定義應(yīng)用自身使用的action映射及result定義;當(dāng)然我們一般將應(yīng)用的各個(gè)模塊分配到不同的配置文件中。目錄1Struts2框架概述2Struts2框架的基本用法3Struts2框架的標(biāo)簽庫4Struts2框架的高級應(yīng)用5本講小結(jié)Struts2的標(biāo)簽簡介Struts2提供的標(biāo)簽庫功能非常強(qiáng)大,而且非常好用。使用標(biāo)簽來開發(fā)可以使得頁面更加整潔容易維護(hù),同樣可以減少代碼量以及開發(fā)時(shí)間。Struts2提供的標(biāo)簽非常之多,其大致分為兩類:一類是非用戶界面標(biāo)簽,也稱為非UI標(biāo)簽(通用標(biāo)簽)。控制標(biāo)簽:條件、循環(huán)等流程控制數(shù)據(jù)標(biāo)簽:數(shù)據(jù)存儲和處理一類是用戶界面標(biāo)簽,也稱為UI標(biāo)簽。表單標(biāo)簽:主要用于生成HTML的表單非表單標(biāo)簽:如顯示日期、樹形菜單通用標(biāo)簽之控制標(biāo)簽邏輯控制標(biāo)簽主要用來完成流程控制,如分支和循環(huán)操作。也可以用來對集合進(jìn)行合并、排序等操作。通用標(biāo)簽之控制標(biāo)簽Struts2提供了三個(gè)標(biāo)簽用于進(jìn)行分支流程控制,分別是if標(biāo)簽、elseif標(biāo)簽、else標(biāo)簽。其中if標(biāo)簽、elseif標(biāo)簽提供了一個(gè)test屬性用來進(jìn)行判斷。if/elseif/else標(biāo)簽的使用和Java語言中的if-elseif-else流程控制語言使用上是基本類似的。實(shí)例演示通用標(biāo)簽之邏輯控制標(biāo)簽Struts2提供iterator標(biāo)簽用來對集合進(jìn)行遍歷,這里所說的集合包括List、Set和數(shù)組以及Map。實(shí)例演示(判斷成績分類)通用標(biāo)簽之邏輯控制標(biāo)簽Struts2中提供append標(biāo)簽用于將多個(gè)集合拼接組合成一個(gè)集合。merge標(biāo)簽同append標(biāo)簽類似,也是用來組合集合成一個(gè)新集合。generator可以將指定的字符串分隔成多個(gè)子字符串,并將這些子字符串放置到一個(gè)集合中。通用標(biāo)簽之邏輯控制標(biāo)簽subset標(biāo)簽用來取得集合的子集sort標(biāo)簽用來通過指定的Comparator對集合中的元素進(jìn)行排序通用標(biāo)簽之?dāng)?shù)據(jù)訪問標(biāo)簽數(shù)據(jù)訪問標(biāo)簽用來訪問ValueStack中的數(shù)據(jù),從而完成數(shù)據(jù)訪問相關(guān)功能。例如通過action標(biāo)簽可以用來顯示Action中的屬性,通過bean標(biāo)簽允許直接在JSP頁面中創(chuàng)建JavaBean實(shí)例等。每個(gè)Action類的對象實(shí)例會擁有一個(gè)ValueStack對象。當(dāng)Struts2接收到一個(gè).action的請求后,會先建立Action類的對象實(shí)例,并且將Action類的對象實(shí)例壓入ValueStack對象中。setValue和findValue方法可以設(shè)置和獲得Action對象的屬性值。通用標(biāo)簽之?dāng)?shù)據(jù)訪問標(biāo)簽action標(biāo)簽用來在JSP頁面中調(diào)用Action,通過指定設(shè)置其executeResult屬性為true,能將處理結(jié)果對應(yīng)的視圖資源包含到JSP頁面中。Struts2提供bean標(biāo)簽允許直接在JSP頁面中創(chuàng)建JavaBean實(shí)例,可以使用param標(biāo)簽在該JavaBean實(shí)例傳入屬性值,也可以通過property標(biāo)簽輸出該JavaBean實(shí)例的屬性值。通用標(biāo)簽之?dāng)?shù)據(jù)訪問標(biāo)簽property標(biāo)簽set標(biāo)簽push標(biāo)簽通用標(biāo)簽之?dāng)?shù)據(jù)訪問標(biāo)簽Struts2提供include標(biāo)簽用于將JSP頁面,或者Servlet包含到該頁面中。Struts2提供url標(biāo)簽用來生成一個(gè)URL地址。其他標(biāo)簽UI標(biāo)簽簡介Struts2提供了豐富的UI標(biāo)簽,使用這些標(biāo)簽可以實(shí)現(xiàn)非常好的顯示效果。同時(shí)Struts2的UI標(biāo)簽都是基于主題和模板的,通過使用不同的主題或模板就能顯示不同的顯示效果。模板:一個(gè)文件,能被特定標(biāo)簽輸出主題:一系列的模板打包。UI標(biāo)簽之通用屬性所有的表單標(biāo)簽可以分為兩種:form標(biāo)簽本身和單個(gè)表單元素的標(biāo)簽。所有表單標(biāo)簽處理類都繼承了UIBean類,UIBean包含了一些通用屬性,這些通用屬性分成3種:模板相關(guān)屬性;javascript相關(guān)屬性;

通用屬性。UI標(biāo)簽之表單標(biāo)簽form標(biāo)簽textfield標(biāo)簽textarea標(biāo)簽checkbox標(biāo)簽select標(biāo)簽......UI標(biāo)簽之非表單標(biāo)簽輸出一些表單以外的HTML元素包括:1,a:生成一個(gè)超鏈接2,actionerror:如果Action實(shí)例的getActionErrors()方法返回不為null,則該標(biāo)簽負(fù)責(zé)輸出該方法返回的系列錯誤。3,actionmessage:如果Action實(shí)例的getActionMessages()方法返回不為null,則該標(biāo)簽負(fù)責(zé)輸出該方法返回的系列消息。4,component:使用此標(biāo)簽可以生成一個(gè)自定義組件。5,div:此標(biāo)簽負(fù)責(zé)生成一個(gè)div片段6,fielderror:如果Action實(shí)例存在表單域的類型轉(zhuǎn)換錯誤,校驗(yàn)錯誤,該標(biāo)簽則負(fù)責(zé)輸出這些錯誤提示。7,tabbedPanel:生成HTML頁面的Tab頁。8,tree:生成一個(gè)樹形結(jié)構(gòu)。9,treenode:生成樹形結(jié)構(gòu)的節(jié)點(diǎn)。.......目錄1Struts2框架概述2Struts2框架的基本用法3Struts2框架的標(biāo)簽庫4Struts2框架的高級應(yīng)用5本講小結(jié)Struts2的類型轉(zhuǎn)換自動類型轉(zhuǎn)換自定義類型轉(zhuǎn)換為什么需要類型轉(zhuǎn)換?在Web世界中輸入輸出是沒有類型概念的,任何數(shù)據(jù)類型都被作為字符串處理;但是在后臺進(jìn)行數(shù)據(jù)處理時(shí),需要對前臺的數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換。Struts2中的類型轉(zhuǎn)換Struts2的類型轉(zhuǎn)換是基于xwork的;對基本類型的轉(zhuǎn)換可以自動完成;對用戶自定義類型的轉(zhuǎn)換需要在后臺進(jìn)行相應(yīng)處理。Struts2的自動類型轉(zhuǎn)換Struts2內(nèi)建的類型轉(zhuǎn)換(雙向)StringtoStringinttoStringdatetoStringetc實(shí)際操作演示Struts2的自動類型轉(zhuǎn)換基于OGNL的類型轉(zhuǎn)換Action里面定義復(fù)合類型的對象前臺Jsp中使用OGNL訪問如:user.username…實(shí)際操作演示制作局部類型轉(zhuǎn)換器的步驟1.自定義轉(zhuǎn)換類繼承DefaultTypeConverter

重寫convertValue(Mapcontext,Objectvalue,ClasstoType)方法

或繼承StrutsTypeConverter類重寫ObjectconvertFromString(Mapcontext,String[]values,ClasstoClass)和StringconvertToString(Mapcontext,Objecto)方法2.配置文件:

文件名:Action類名-perties

需要和對應(yīng)Action在同一目錄下

文件內(nèi)容:

屬性名=轉(zhuǎn)換類名

(多個(gè)屬性就寫多行)制作全局類型轉(zhuǎn)換器的步驟1.

同局部類型轉(zhuǎn)換器的步驟相同2.配置文件:

文件名:perties文件內(nèi)容:需要類型轉(zhuǎn)換的自定義類名=轉(zhuǎn)換類名自定義類型轉(zhuǎn)換器演示用戶自定義類型轉(zhuǎn)換MyPointtoStringStringtoMyPoint實(shí)際操作演示表單輸入界面(簡單)自定義類MyPoint定義轉(zhuǎn)換類1后臺Action設(shè)置局部轉(zhuǎn)換設(shè)置全局轉(zhuǎn)換定義轉(zhuǎn)換類2表單輸入界面(復(fù)雜)Action類的定義使用泛型的類型轉(zhuǎn)換(推薦)定義轉(zhuǎn)換類3(泛型)輸出成功界面(泛型)類型轉(zhuǎn)換中的錯誤處理全局處理在應(yīng)用的國際化資源文件中重寫該變量值xwork.default.invalid.fieldvalue={0}類型轉(zhuǎn)化錯誤局部處理在ActionNperties中重寫該變量值invalid.fieldvalue.屬性名=提示的錯誤信息實(shí)際操作演示Struts2的輸入校驗(yàn)語法校驗(yàn)語義校驗(yàn)校驗(yàn)的概念校驗(yàn)的定義:對異常輸入的過濾校驗(yàn)的分類客戶端校驗(yàn)過濾用戶的誤操作主要通過JavaScript代碼完成速度快,不和服務(wù)器交互服務(wù)器端校驗(yàn)校驗(yàn)邏輯錯誤通過在服務(wù)器端編碼實(shí)現(xiàn)需要和服務(wù)器交互Struts2的輸入校驗(yàn)之服務(wù)器端校驗(yàn)手動校驗(yàn)validate()方法屬于硬編碼方式框架校驗(yàn)以xml文件的形式分為字段校驗(yàn)和非字段校驗(yàn)框架校驗(yàn)-xml頭文件<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN""/xwork/xwork-validator-1.0.2.dtd">......框架驗(yàn)證-dtd文件框架驗(yàn)證-字段校驗(yàn)示例框架驗(yàn)證-字段校驗(yàn)示例框架驗(yàn)證-非字段校驗(yàn)框架驗(yàn)證-驗(yàn)證器的短路框架驗(yàn)證-內(nèi)建校驗(yàn)器Struts2提供了大量的內(nèi)建校驗(yàn)器,可以滿足大部分應(yīng)用的校驗(yàn)需求。開發(fā)者只需要使用這些校驗(yàn)器即可。開發(fā)者也可以自定義校驗(yàn)器。框架驗(yàn)證-內(nèi)建校驗(yàn)器必填校驗(yàn)器:required必填字符串校驗(yàn)器:requiredstring整數(shù)校驗(yàn)器:int,long,short日期校驗(yàn)器:date表達(dá)式校驗(yàn)器:expression郵件地址校驗(yàn)器:email其他內(nèi)建校驗(yàn)器不同方法的校驗(yàn)(validate方法)不同方法的校驗(yàn)(框架校驗(yàn))執(zhí)行Action中的方法名稱校驗(yàn)XML文件名稱默認(rèn):execute()Action名稱-validation.xml其他方法:如abc()Action名稱-abc-validation.xml注意:該種驗(yàn)證方式,會先執(zhí)行Action名稱-validation.xml文件struts2提供的客戶端校驗(yàn)1.form主題(theme)不能為simple2.將form的validate設(shè)為true3.最好不要使用struts2提供的客戶端校驗(yàn)Struts2所支持的其他類型客戶端校驗(yàn)純JavaScript客戶端校驗(yàn)更靈活,速度更快推薦使用Ajax客戶端校驗(yàn)可以不刷新頁面顯示錯誤信息需要使用ajax主題客戶端校驗(yàn)-JavaScriptStruts2的文件上傳下載文件上傳文件下載使用Struts2控制文件上傳為了能上傳文件,必須將表單的method設(shè)置為POST,將enctype設(shè)置為multipart/form-data步驟實(shí)現(xiàn)文件上傳的Action配置文件上傳的Action實(shí)現(xiàn)文件過濾手動實(shí)現(xiàn)攔截器實(shí)現(xiàn)修改錯誤提示實(shí)際操作演示使用Struts2控制文件上傳如果表單中包含一個(gè)name為xxx的文件域,則對應(yīng)Action需要三個(gè)屬性來封裝該文件域的信息類型為File的xxx屬性:文件內(nèi)容類型為String的xxxFileName屬性:文件名類型為String的xxxContentType屬性:文件類型使用Struts2控制文件上傳<center><h1>Struts2完成上傳</h1><formaction="upload.action"method="post"enctype="multipart/form-data"><table><tr><td>用戶名:</td><td><inputtype="text"name="username"></td></tr><tr><td>上傳文件:</td><td><inputtype="file"name="myFile"></td></tr><tr><td><inputtype="submit"value="上傳"></td><td><inputtype="reset"></td></tr></table></form></center>使用Struts2控制文件上傳使用Struts2控制文件上傳注意上傳文件是放在Web服務(wù)器的相應(yīng)路徑下面設(shè)置上傳文件的大小限制<constantname=“struts.multipart.maxSize”value=“設(shè)置值”></constant>設(shè)置值的單位為字節(jié)byte默認(rèn)值為2MB使用Struts2控制文件下載Struts2提供了stream結(jié)果類型,該結(jié)果類型就是專門用于支持文件下載功能的。步驟實(shí)現(xiàn)文件下載的Action配置文件下載的Action下載前的授權(quán)控制實(shí)際操作演示使用Struts2控制文件下載使用Struts2控制文件下載contentType內(nèi)容類型,和互聯(lián)網(wǎng)MIME標(biāo)準(zhǔn)中的規(guī)定類型一致,例如text/plain代表純文本,text/xml表示XML,image/gif代表GIF圖片,image/jpeg代表JPG圖片inputName下載文件的來源流,對應(yīng)著action類中某個(gè)類型為Inputstream的屬性名,例如取值為inputStream的屬性需要編寫getInputStream()方法contentDisposition文件下載的處理方式,包括內(nèi)聯(lián)(inline)和附件(attachment)兩種方式,而附件方式會彈出文件保存對話框,否則瀏覽器會嘗試直接顯示文件。取值為:attachment;filename="struts2.txt",表示文件下載的時(shí)候保存的名字應(yīng)為struts2.txt。如果直接寫filename="struts2.txt",那么默認(rèn)情況是代表inline,瀏覽器會嘗試自動打開它,等價(jià)于這樣的寫法:inline;filename="struts2.txt"bufferSize下載緩沖區(qū)的大小教材例子直接使用Html文件不能實(shí)現(xiàn)文件名中帶有漢字的文件下載使用struts2的action則可以一個(gè)綜合性的文件上傳下載例子操作演示Struts2的攔截器攔截器體系是Struts2框架的重要組成部分大量的內(nèi)置攔截器完成了框架大約70%的工作params攔截器:負(fù)責(zé)解析參數(shù)和賦值工作I18n攔截器:負(fù)責(zé)把所選locale放入用戶sessiontimer攔截器:輸出action的執(zhí)行時(shí)間token攔截器:防止重復(fù)提交其他內(nèi)置攔截器Struts2已經(jīng)默認(rèn)啟用了大量通用功能的攔截器(通過繼承struts-default包實(shí)現(xiàn))Struts2的攔截器機(jī)制攔截器是AOP中的概念,它本身是一段代碼,可以通過定義“織入點(diǎn)”,來指定攔截器的代碼在“織入點(diǎn)”的前后執(zhí)行,從而起到攔截的作用。正如Struts2的Reference中講述的,Struts2的Interceptor,其攔截的對象是Action代碼,可以定義在Action代碼之前或者之后執(zhí)行攔截器的代碼。Struts2的攔截器機(jī)制Struts2的攔截器機(jī)制1.整個(gè)結(jié)構(gòu)就如同一個(gè)堆棧,除了Action以外,堆棧中的其他元素是Interceptor。2.Action位于堆棧的底部。由于堆棧"先進(jìn)后出"的特性,如果我們試圖把Action拿出來執(zhí)行,我們必須首先把位于Action上端的Interceptor拿出來執(zhí)行。這樣,整個(gè)執(zhí)行就形成了一個(gè)遞歸調(diào)用3.每個(gè)位于堆棧中的Interceptor,除了需要完成它自身的邏輯,還需要完成一個(gè)特殊的執(zhí)行職責(zé)。這個(gè)執(zhí)行職責(zé)有3種選擇:1)中止整個(gè)執(zhí)行,直接返回一個(gè)字符串作為resultCode2)通過遞歸調(diào)用負(fù)責(zé)調(diào)用堆棧中下一個(gè)Interceptor的執(zhí)行3)如果在堆棧內(nèi)已經(jīng)不存在任何的Interceptor,調(diào)用ActionStruts2的攔截器機(jī)制配置攔截器定義攔截器的格式<interceptorname=“攔截器名”class=“攔截器實(shí)現(xiàn)類”/>可以把多個(gè)攔截器配置為一個(gè)攔截器棧使用攔截器的格式<action……><interceptor-refname=“攔截器(棧)名1”/><interceptor-refname=“攔截器(棧)名2”/>……</action>攔截器棧介紹作用:把多個(gè)攔截器或攔截器棧配置在一個(gè)攔截器棧內(nèi),方便用戶調(diào)用;攔截器棧可以由多個(gè)攔截器組成;也可以由別的攔截器棧和攔截器等組成

<interceptor-stackname="myStack">

<interceptor-refname="myInterceptor1"></interceptor-ref>

<interceptor-refname="myInterceptor2"></interceptor-ref>

<interceptor-refname="defaultStack"></interceptor-ref>

</interceptor-stack>

用戶自定義攔截器的步驟自定義攔截器類需要實(shí)現(xiàn)erceptor.Interceptor接口或者是繼承AbstractInterceptor類實(shí)現(xiàn)或是重載interceptor(ActionInvocation)方法在struts.xml文件中定義攔截器在struts.xml文件中使用攔截器實(shí)際操作演示用戶權(quán)限驗(yàn)證攔截器當(dāng)瀏覽者需要請求執(zhí)行某個(gè)操作時(shí),應(yīng)用需要先檢查瀏覽者是否已登錄,以及是否有足夠的權(quán)限來執(zhí)行該操作實(shí)際操作演示權(quán)限攔截器部分代碼 Objectobj=ActionContext.getContext() .getSession().get("username"); StringstrName=obj!=null?obj.toString():""; if(strName.equals("abc")) { System.out.println("action執(zhí)行前"); Stringstr=invocation.invoke(); System.out.println("action執(zhí)行后"); returnstr; } else {return"input";}目錄1Struts2框架概述2Struts2框架的基本用法3Struts2框架的標(biāo)簽庫4Struts2框架的高級應(yīng)用5本講小結(jié)本講小結(jié)Struts2概述Struts2的下載和安裝Struts2的基礎(chǔ)知識Struts2的高級應(yīng)用EndHibernate框架第4講Hibernate框架掌握Hibernate基礎(chǔ)應(yīng)用了解Hibernate高級應(yīng)用課程目標(biāo)目錄1Hibernate框架概述2Hibernate框架的基本用法3Hibernate框架的高級應(yīng)用4本講小結(jié)Hibernate概述Hibernate是一個(gè)開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用。最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。JDBC簡介JDBC(JavaDataBaseConnectivity)是一種用于執(zhí)行SQL語句的JavaAPI。JDBC提供的主要接口:DriverManager類Connection類Statement類PreparedStatement類ResultSet類使用JDBC訪問數(shù)據(jù)庫的步驟(1)加載JDBC驅(qū)動(2)實(shí)例化數(shù)據(jù)庫連接驅(qū)動類(3)建立數(shù)據(jù)庫連接,取得Connection對象(4)建立Statement對象或PreparedStatement對象.(5)執(zhí)行SQL語句(6)訪問結(jié)果記錄集ResultSet對象(7)依次將ResultSet,Statement,PreparedStatement,Connection對象關(guān)閉,釋放所占用的資源。對直接使用JDBC的反思直接使用JDBC操作數(shù)據(jù)庫的步驟很繁瑣。JDBC操作的是關(guān)系型數(shù)據(jù)庫。用JAVA開發(fā)程序,則使用面向?qū)ο蟮乃枷搿ibernate正是在這兩種不同的模型之間建立關(guān)聯(lián),Hibernate給我們提供了利用面向?qū)ο蟮乃枷雭聿僮麝P(guān)系型數(shù)據(jù)的接口。持久化和持久化層在Java中將對象自動持久化到數(shù)據(jù)庫中,我們需要了解兩個(gè)概念。持久化:就是對數(shù)據(jù)和程序狀態(tài)的保持。大多數(shù)情況下特別是企業(yè)級開發(fā)應(yīng)用時(shí),數(shù)據(jù)持久化往往也就意味著將內(nèi)存中的數(shù)據(jù)保存到磁盤上加以固化,而持久化的實(shí)現(xiàn)過程則大多通過各種關(guān)系型數(shù)據(jù)庫來完成的。持久化層:把數(shù)據(jù)庫實(shí)現(xiàn)當(dāng)作一個(gè)獨(dú)立邏輯拿出來,即數(shù)據(jù)庫程序是在內(nèi)存中的,為了使程序運(yùn)行結(jié)束后狀態(tài)得以保存,就要保存到數(shù)據(jù)庫。持久化層是在系統(tǒng)邏輯層面上,專注于實(shí)現(xiàn)數(shù)據(jù)持久化的一個(gè)相對獨(dú)立的領(lǐng)域。關(guān)系型數(shù)據(jù)庫和面向?qū)ο蟮臎_突面向?qū)ο笫菑能浖こ袒驹瓌t(如耦合、聚合和封裝)的基礎(chǔ)上發(fā)展起來的。關(guān)系數(shù)據(jù)庫則是從數(shù)學(xué)理論發(fā)展而來的,兩套理論存在顯著的區(qū)別。Java是完全面向?qū)ο蟮恼Z言,這個(gè)沖突就表現(xiàn)的越發(fā)明顯。ORM介紹ORM的全稱是Object/RelationMapping,即對象/關(guān)系映射。ORM是一種規(guī)范、模型、思想。具體的ORM框架可作為應(yīng)用程序和數(shù)據(jù)庫的橋梁。目前ORM的產(chǎn)品非常多,比如Apache組織下的OJB,Oracle的TopLink、JDO和JPA等,當(dāng)然還包括本章介紹的Hibernate。ORM帶來了什么ORM并不是一種具體的產(chǎn)品,而是一類框架的總稱,它概述了這類框架的基本特征:完成面向?qū)ο蟮某绦蛟O(shè)計(jì)語言到關(guān)系數(shù)據(jù)庫的映射。基于ORM框架完成映射后,既可利用面向?qū)ο蟪绦蛟O(shè)計(jì)語言的簡單易用性,又可利用關(guān)系數(shù)據(jù)庫的技術(shù)優(yōu)勢。流行的ORM框架EnitiyEJB:EnitiyEJB實(shí)際上也是一種ORM技術(shù),這是一直備受爭議的組件技術(shù)。事實(shí)上,EJB為JavaEE的蓬勃發(fā)展贏得了極高的聲譽(yù),EJB作為一種重量級、高花費(fèi)的ORM技術(shù)具有不可比擬的優(yōu)勢。就其他架構(gòu)設(shè)計(jì)來講,依然非常優(yōu)秀。即使現(xiàn)在十分流行的輕量級JavaEE架構(gòu),其實(shí)質(zhì)是對經(jīng)典JavaEE架構(gòu)的模仿——雖然存在些許的改進(jìn)。EJB3.1也采取了低侵入式的設(shè)計(jì),增加了Annotation,也具有極大的吸引力。Hibernate:目前最流行的開源ORM框架,已經(jīng)被選作JBoss的持久層解決方案。整個(gè)HIbernate項(xiàng)目也一并投入了Jboss的懷抱,而JBoss又加入了RedHat組織,所以現(xiàn)在Hibernate屬于RedHat的一部分。Hibernate靈巧的設(shè)計(jì)、優(yōu)秀的性能,還有其豐富的文檔都是其風(fēng)靡全球的重要因素。iBatis:Apache軟件基金組織的子項(xiàng)目。與其稱它為一種ORM框架,不如稱它為一中“SQLMapping”框架。曾經(jīng)在J2EE的開發(fā)中扮演非常重要的角色,但因?yàn)椴恢С执娲獾拿嫦驅(qū)ο蟛僮鳎虼爽F(xiàn)在逐漸地被取代。但是在一些公司,依然占有一席之地,特別是一些對數(shù)據(jù)訪問特別靈活的地方,iBatis更加的靈活,它允許開發(fā)人員直接編寫SQL語句。TopLink:Oracle公司的產(chǎn)品,作為一個(gè)遵循OTN協(xié)議的商業(yè)產(chǎn)品,TopLink在開發(fā)過程中可以自由地下載和使用,但是一旦作為商業(yè)產(chǎn)品被使用,則需要收取費(fèi)用。由于這一點(diǎn),TopLink的市場占有率不高。OBJ:Apache軟件基金組織的子項(xiàng)目。另一個(gè)開源的ORM框架,可以說是Apache作為iBatis之后的取代產(chǎn)品,也是非常優(yōu)秀的O/RMapping框架,但是由于Hibernate的廣芒太盛,所以并未有廣泛的使用,而且由于OJB的開發(fā)文檔不是很多,這也影響了OJB的流行。Hibernate的優(yōu)勢開源免費(fèi)的License,方便需要時(shí)研究源代碼,改寫源代碼,進(jìn)行功能定制。輕量級封裝,避免引入過多復(fù)雜的問題,調(diào)試容易,減輕程序員的負(fù)擔(dān)。具有可擴(kuò)展性,API開放。功能不夠用時(shí),自己進(jìn)行編碼擴(kuò)展。開發(fā)者活躍,有穩(wěn)定的發(fā)展保障。Hibernate與O、R之間的關(guān)系JPA的概念JPA(JavaPersistenceAPI,Java持久化API)是SUN官方提出的Java持久化規(guī)范,hibernates就是依據(jù)它實(shí)現(xiàn)的。它為Java開發(fā)人員提供了一種對象/關(guān)系映射工具來管理Java應(yīng)用中的關(guān)系數(shù)據(jù)庫。學(xué)習(xí)Hibernate的步驟下載與安裝Hibernate下載與安裝HibernateHibernate4

下載列表(舊版)安裝和配置MySql下載MySQL數(shù)據(jù)庫http://dev.MySQL.com/downloads/安裝MySQL數(shù)據(jù)庫配置MySQL數(shù)據(jù)庫默認(rèn)用戶名root,密碼admin(自定義)使用MySQL數(shù)據(jù)庫掌握MySql常用命令安裝NavicatforMySQL(前端工具)下載MySQL的JDBC驅(qū)動第一個(gè)Hibernate程序Hibernate實(shí)例演示用Hibernate直接創(chuàng)建表先創(chuàng)建數(shù)據(jù)庫(手動完成)再創(chuàng)建數(shù)據(jù)庫表(程序完成)從代碼生成數(shù)據(jù)庫表在代碼中操作數(shù)據(jù)庫表//讀取hibernate.cfg.xml文件Configurationcfg=newConfiguration().configure();//創(chuàng)建SessionFactorySessionFactoryfactory=cfg.buildSessionFactory();Sessionsession=null;try{session=factory.openSession();//開啟事務(wù)session.beginTransaction();Useruser=newUser();user.setName("張三");user.setPassword("123");user.setCreateTime(newDate());user.setExpireTime(newDate());//保存數(shù)據(jù)session.save(user);//提交事務(wù)session.getTransaction().commit();}catch(Exceptione){e.printStackTrace();//回滾事務(wù)session.getTransaction().rollback();}finally{if(session!=null){if(session.isOpen()){session.close();}}}}hibernate.cfg.xml(范例)<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><propertyname="connection.username">root</property><propertyname="connection.password">admin</property><propertyname="connection.url">jdbc:mysql://:3306/java2Db</property><propertyname="dialect“>org.hibernate.dialect.MySQLDialect</property><propertyname="connection.driver_class“>com.mysql.jdbc.Driver</property><propertyname="hbm2ddl.auto">update</property><propertyname="show_sql">true</property><propertyname="format_sql">true</property><mappingresource="com/bean/User.hbm.xml"/></session-factory></hibernate-configuration>其他自動生成Hibernate映射文件Hibernate自動生成配置文件操作演示補(bǔ)充知識:Java的單元測試加載JUnit.jar包注意JUnit3和Junit4的區(qū)別JUnit3的測試類需要繼承TestCaseJUnit4的方法前使用@TestJUnit4的@Before和@After建立一個(gè)獨(dú)立的源代碼包(可選)在子類中進(jìn)行測試方法的編寫方法必須是public類型的方法的返回值一般為void可以以方法為粒度進(jìn)行測試目錄1Hibernate框架概述2Hibernate框架的基本用法3Hibernate框架的高級應(yīng)用4本講小結(jié)Hibernate體系結(jié)構(gòu)簡要的Hibernate體系架構(gòu)Hibernate全面解決方案體系架構(gòu)Hibernate全面解決方案架構(gòu)解釋SessionFactory:單個(gè)數(shù)據(jù)庫映射關(guān)系經(jīng)過編譯后的內(nèi)存鏡像。Session:它是應(yīng)用程序和持久存儲層之間交互操作的一個(gè)單線程對象持久化對象:處于持久化狀態(tài)的對象瞬態(tài)對象和脫管對象:系統(tǒng)進(jìn)行new關(guān)鍵字進(jìn)行創(chuàng)建的Java實(shí)例,沒有Session相關(guān)聯(lián),此時(shí)處于瞬態(tài)事務(wù)(Transaction):代表一次原子操作,它具有數(shù)據(jù)庫事務(wù)的概念連接提供者(ConnectionProvider):生成JDBC的連接的工廠,同時(shí)具備連接池的作用事務(wù)工廠(TransactionFactory):生成Transaction對象實(shí)例的工廠Hibernate的配置Configuration對象org.hibernate.cfg.Configuration實(shí)例代表一個(gè)應(yīng)用程序到SQL數(shù)據(jù)庫的映射配置,Configuration提供了一個(gè)buildSessionFactory()方法,該方法可以產(chǎn)生一個(gè)不可變的SessionFactory對象。配置Hibernate的方式使用perties文件作為配置文件。使用hibernate.cfg.xml文件作為配置文件。不使用任何的配置文件,以編碼方式來創(chuàng)建Configuration對象。Hibernate的配置JDBC連接屬性配置數(shù)據(jù)庫方言配置JNDI數(shù)據(jù)源的連接屬性配置Hibernate事物屬性配置二級緩存相關(guān)屬性配置外連接抓取屬性配置其他常用的配置JDBC連接配置中最重要的設(shè)置hibernate.connection.driver_class:設(shè)置連接數(shù)據(jù)庫驅(qū)動。hibernate.connection.url:設(shè)置所連接數(shù)據(jù)庫服務(wù)的URL。hibernate.connection.username:連接數(shù)據(jù)庫的用戶名。hibernate.connection.password:連接數(shù)據(jù)庫的密碼。hibernate.connection.pool_size:設(shè)置hibernate數(shù)據(jù)庫連接池的最大并發(fā)連接數(shù)。hibernate.dialect:設(shè)置數(shù)據(jù)庫連接所使用的方言。其他常用的配置屬性hibernate.show_sql:是否在控制臺輸出Hibernate生成的SQL語句,只能為true或者false兩個(gè)值hibernate.format_sql:是否將SQL語句轉(zhuǎn)換成格式良好的SQL語句。hibernate.use_sql_comments:是否在Hibernate生成的SQL語句中添加有助于調(diào)試的注視,只接受true和false兩個(gè)值。hibernate,jdbc.fetch_size:指定JDBC抓取數(shù)量的大小,它可以接受一個(gè)整數(shù)值,其實(shí)質(zhì)是調(diào)用Statement.setFetchSize()方法。hibernate.jdbc.batch_size:指定Hibernate使用JDBC2的批量更新的大小,它可接受一個(gè)整數(shù)值,建議是取5到30之間。hibernate.connection.autocommit:設(shè)置是否自動提交。通常不建議自動提交。hibernate.hbm2ddl.auto:設(shè)置當(dāng)創(chuàng)建SessionFactory是,將Drop剛建的數(shù)據(jù)表。該屬性可以是update、create和drop-create三個(gè)值。持久化類的要求提供一個(gè)無參的構(gòu)造器提供一個(gè)標(biāo)識屬性標(biāo)識屬性的類型盡量避免基本類型為持久化類的每個(gè)屬性添加set和get方法使用非final類重寫equal()和hashCode()方法持久化對象的狀態(tài)持久化對象PO=POJO+映射文件PO可有以下的3種狀態(tài)。瞬態(tài):如果PO實(shí)例從未與Session實(shí)例關(guān)聯(lián)過,該實(shí)例處于瞬態(tài)狀態(tài)。持久化:如果PO實(shí)例與Session實(shí)例關(guān)聯(lián)起來,且該實(shí)例關(guān)聯(lián)到數(shù)據(jù)庫的記錄。

脫管:如果PO實(shí)例曾經(jīng)與Session實(shí)例關(guān)聯(lián)過,但是因?yàn)镾ession的關(guān)閉等原因,PO實(shí)例脫離了Session的管理,這種狀態(tài)被稱為脫管狀態(tài)。對PO的操作必須在Session的管理下才能同步到數(shù)據(jù)庫,Session由SessionFactory工廠產(chǎn)生,SessionFactory是數(shù)據(jù)庫編譯后的內(nèi)存鏡像,通常一個(gè)對應(yīng)一個(gè)SessionFactory對象。SessionFactory對象是由Configuration對象生成,Configuration負(fù)責(zé)加載Hibernate配置文件。持久化對象的狀態(tài)瞬態(tài):對象由new操作符創(chuàng)建,且尚未HibernateSession關(guān)聯(lián)的對象被認(rèn)為處于瞬態(tài)。瞬態(tài)對象不會被持久化到數(shù)據(jù)庫中,也不會被賦予持久化標(biāo)識,如果程序中失去了瞬態(tài)對象的引用,瞬態(tài)對象將會被垃圾回收機(jī)制銷毀。使用HibernateSession可以將其變?yōu)槌志没癄顟B(tài)。持久化對象的狀態(tài)持久化:持久化實(shí)例在數(shù)據(jù)庫中有對應(yīng)的記錄,并且擁有一個(gè)持久化標(biāo)識。持久化的實(shí)例是可以剛剛保存的,也可以是剛剛被加載的,無論那一種,持久化對象都必須與指定的hibernateSession關(guān)聯(lián)。hibernate會檢測到處于持久化狀態(tài)對象的改動,在當(dāng)前操作執(zhí)行完成時(shí)將對象數(shù)據(jù)寫回?cái)?shù)據(jù)庫。開發(fā)者不需要手動執(zhí)行UPDATE。持久化對象的狀態(tài)脫管:某個(gè)實(shí)例曾屬于持久化狀態(tài),但隨著與之關(guān)聯(lián)的Session被關(guān)閉,該對象就變?yōu)榱嗣摴軕B(tài)。對脫管對象的引用依然有效,對象可以被繼續(xù)修改。如果讓脫管對象與某個(gè)Session關(guān)聯(lián),那么這個(gè)脫管態(tài)對象將會重新轉(zhuǎn)換為持久化狀態(tài),而脫管態(tài)期間的改動也不會丟失,也可被寫入數(shù)據(jù)庫。正是因?yàn)檫@個(gè)原因,邏輯上的長事務(wù)成為了可能,它被稱為應(yīng)用程序事務(wù)。即事務(wù)可以跨越用戶的思考,因?yàn)楫?dāng)對象處于脫管態(tài),對該對象操作無須鎖定數(shù)據(jù)庫,不會造成性能的下降。持久化對象的狀態(tài)遷移Get方法和Load方法的區(qū)別get():立即加載對象的屬性立即從數(shù)據(jù)庫中去查找load():延遲加載對象的屬性只有在使用的時(shí)候才從數(shù)據(jù)庫中去查找實(shí)際操作演示映射文件的基本結(jié)構(gòu)<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="類路徑.類名"><idname="id">………</id><propertyname="name"/>…..</class></hibernate-mapping>Hibernate映射文件基本結(jié)構(gòu)<hibernate-mapping.../>根元素持久化類的標(biāo)識屬性<id.../>元素的屬性映射普通屬性的<property.../>元素映射集合屬性持久化類的標(biāo)識屬性在數(shù)據(jù)庫表中通過主鍵實(shí)現(xiàn)記錄識別的唯一性,而Hibernate中的持久化對象則通過標(biāo)識符屬性來實(shí)現(xiàn)唯一性識別。Hibernate中的標(biāo)識符屬性也可稱為hibernate主鍵,它賦予每個(gè)持久化對象獨(dú)一無二的數(shù)值,所以可以認(rèn)為標(biāo)識符屬性是數(shù)據(jù)庫主鍵的等價(jià)物。Hibernate的主鍵生成器increment:由Hibernate在內(nèi)存中生成主鍵,每次增量為1,不依賴于底層的數(shù)據(jù)庫identity:采用數(shù)據(jù)庫生成的主鍵,用于為long、short、int類型生成唯一標(biāo)識sequence:DB2、Oracle均支持的序列,用于為long、short或int生成唯一標(biāo)識hilo:使用一個(gè)高/低位算法生成的long、short或int類型的標(biāo)識符native:根據(jù)底層數(shù)據(jù)庫的能力,從identity、sequence、hilo中選擇一個(gè),靈活性更強(qiáng)uuid:使用一個(gè)128-bit的UUID算法生成字符串類型的標(biāo)識符,32位的字符串映射普通屬性Hibernate使用<property../>元素來映射普通屬性必選屬性:name可選屬性:type、update、insert、formula、access、lazy、not-null、optimistic-lock、unique、length等type屬性簡單介紹屬性映射的類型--typeHibernate的內(nèi)置類型通常使用和Java類型相同的名字,它能夠把Java基本類型、Java日期和時(shí)間類型、Java大對象類型及JDK常用的Java類型映射到相應(yīng)的標(biāo)準(zhǔn)SQL類型;Java通過Hibernate訪問數(shù)據(jù)庫,而Hibernate又通過JDBC訪問數(shù)據(jù)庫,而JDBC對底層數(shù)據(jù)庫SQL類型進(jìn)行封裝,向上提供標(biāo)準(zhǔn)的SQL類型接口,這樣Hibernate就可以根據(jù)底層數(shù)據(jù)庫的方言,把標(biāo)準(zhǔn)SQL類型轉(zhuǎn)換為底層數(shù)據(jù)庫類型。類型映射注意事項(xiàng)在映射文件中,映射類型可以是Java類型,或是Hibernate類型。若需要映射類型,一定要書寫正確;如果使用Java類型,則需添加全路徑(即包括包名的路徑)。映射集合屬性List集合屬性的映射數(shù)組屬性的映射Set集合屬性的映射Bag元素映射Map屬性映射映射集合屬性有序集合的屬性在增加、刪除、修改中擁有較好的性能表現(xiàn)。因?yàn)閿?shù)組的長度不可變,所以無法使用延遲加載。通常認(rèn)為List、Map作為集合元素的性能較高,Set緊隨其后,數(shù)組最差。映射屬性演示映射普通屬性實(shí)際操作演示映射集合屬性實(shí)際操作演示自動生成Hibernate映射文件使用MyEclipse自動生成映射文件實(shí)際操作演示SessionFactory類的封裝SessionFactory是重量級對象,不要頻繁創(chuàng)建實(shí)際操作演示JPAAnnotation介紹從JDK1.5開始,java增加了Annotation支持。Hibernate提供了hibernateannotation擴(kuò)展包,它是用來替換復(fù)雜的hbm.xml文件,使得hibernate程序開發(fā)大大簡化。程序中只要添加相應(yīng)jar包即可。當(dāng)采用Annotation來管理實(shí)體類之后,可以得到如下公式:PO=POJO+@AnnotationJPAAnnotation用法@Id聲明屬性為主鍵@GeneratedValue表示主鍵是自動生成策略,一般該注釋和@Id一起使用@Entity任何hibernte映射對象都要有次注釋@Table(name=“tablename”)類聲明此對象映射到哪個(gè)表@Column(name=“Name”,nullable=false,length=32)聲明數(shù)據(jù)庫字段和類屬性對應(yīng)關(guān)系JPAAnnotation用法@Lob聲明字段為Clob或Blob類型@OneToMany@ManyToOne@Temporal(value=TemporalType.DATE)做日期類型轉(zhuǎn)換@Transitent表示此屬性不做映射@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)表示此對象應(yīng)用緩存JPAAnnotation介紹對于持久化類屬性的Annotation,可以寫在屬性的定義處上面,也可以寫在該屬性的get方法前面。實(shí)際操作演示JPAAnnotation實(shí)例目錄1Hibernate框架概述2Hibernate框架的基本用法3Hibernate框架的高級應(yīng)用4本講小結(jié)關(guān)聯(lián)關(guān)系的概念客觀世界中的對象很少有孤立存在的,如果把他們作為實(shí)例,那么這種實(shí)例之間的互相訪問就是關(guān)聯(lián)關(guān)系。關(guān)聯(lián)關(guān)系是面向?qū)ο蠓治觥⒚嫦驅(qū)ο笤O(shè)計(jì)最重要的知識,hibernate完全可以理解這種關(guān)聯(lián)關(guān)系,并且對不同的關(guān)聯(lián)關(guān)系提供了很好的支持。關(guān)聯(lián)關(guān)系的分類單向關(guān)聯(lián):只能單向訪問關(guān)聯(lián)端單向1-1單向1-N單向N-1單向N-N雙向關(guān)聯(lián):關(guān)聯(lián)的兩端可以互相訪問雙向1-1雙向1-N雙向N-N以下以單向關(guān)聯(lián)關(guān)系為例介紹單向N-1映射關(guān)系實(shí)體類定義在N端定義1端的一個(gè)實(shí)例映射文件定義(N端)<many-to-onename=“N端定義的1端屬性名”column=“N端生成的外鍵列名"></many-to-one>單向N-1映射關(guān)系實(shí)例演示N-1學(xué)生對班級相應(yīng)CRUD操作演示單向1-N映射關(guān)系實(shí)體類定義在1端定義N端的實(shí)例集合(一般是Set類型)映射文件定義(1端)<setname="students"><keycolumn="classesid"/><one-to-manyclass="Student"/></set>單向1-N映射關(guān)系實(shí)例演示1-N班級對學(xué)生相應(yīng)CRUD操作演示N-1和1-N總結(jié)N-1關(guān)聯(lián)映射:在N端加入一個(gè)外鍵指向1端,它維護(hù)的關(guān)系是N指向11-N關(guān)聯(lián)映射:在N端加入一個(gè)外鍵指向1端,它維護(hù)的關(guān)系是1指向N也就是說1-N和N-1的映射策略是一樣的,只是站的角度不同N-1和1-N生成的數(shù)據(jù)庫表是一樣的,都是在N端生成一個(gè)外鍵列單向1-1映射關(guān)系實(shí)體類定義在1端定義另一個(gè)1端的實(shí)例映射文件定義<one-to-onename=“name”>標(biāo)簽constrained=“true”,表明當(dāng)前主鍵上存在一個(gè)約束,一般是外鍵約束或者是<many-to-one>的基礎(chǔ)上添加unique=true單向1-1映射關(guān)系實(shí)例演示1-1學(xué)生對學(xué)號學(xué)號對學(xué)生相應(yīng)CRUD操作演示單向N-N映射關(guān)系實(shí)體類定義在每個(gè)N端定義另一個(gè)N端的實(shí)例集合,一般是Set類型映射文件定義<setname="roles"table="t_user_role"><keycolumn="userid"/><many-to-manyclass=“另N端類路徑"column="roleid"/></set>單向N-N映射關(guān)系實(shí)例演示N-N學(xué)生對課程課程對學(xué)生相應(yīng)CRUD操作演示雙向映射關(guān)系概述在兩端都添加上映射關(guān)系可以通過指定inverse=“true”來確定哪端

溫馨提示

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

最新文檔

評論

0/150

提交評論