版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
hJavaJavaSSH(MVC)它強(qiáng)制性的把應(yīng)用程序的輸入、處理和輸出分開。MVC中的模型、視圖、控制器分別擔(dān)負(fù)著不同的任務(wù)。輸入。視圖不進(jìn)行任何業(yè)務(wù)邏輯處理。模型:模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)處理。相當(dāng)于JavaBean。一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。這提高了應(yīng)用程序的重用性控制器:當(dāng)用戶單擊Web頁(yè)面中的提交按鈕時(shí),控制器接受請(qǐng)求并調(diào)用相應(yīng)的模型去處理請(qǐng)求,然后根據(jù)處理的結(jié)果調(diào)用相應(yīng)的視圖來顯示處理的結(jié)果。MVC的處理過程:首先控制器接受用戶的請(qǐng)求,調(diào)用相應(yīng)的模型來進(jìn)行業(yè)務(wù)處理,并返回?cái)?shù)據(jù)給控制器??刂破髡{(diào)用相應(yīng)的視圖來顯示處理的結(jié)果。并通過視圖呈現(xiàn)給用戶。StrutsStrutsstruts1.2Action是單例模式的并且必須是線程安全的,因?yàn)閮H有一個(gè)Action的實(shí)Action或同步的。struts2.0Action為每一個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例,因此沒有線程安全問題。struts1.2Action依賴于ServletAPI,因?yàn)楫?dāng)一個(gè)Action被調(diào)用時(shí)d、可測(cè)性試要依賴于容器)。一個(gè)第三方擴(kuò)展:strutsTestCase提供了一套struts1.2的模擬對(duì)象來進(jìn)行測(cè)試。測(cè)試更容易。2.項(xiàng)目中為什么使用SSH大大提高開發(fā)效率。h系映射框架h。hibernate是個(gè)輕量級(jí)的持久性框架,功能豐富。系統(tǒng)的框架,但它不強(qiáng)迫你必須在每一層中必須使用Spring,因?yàn)樗K化得很好,允許你根據(jù)自己的需要選擇使用它的某一個(gè)模塊;3.struts如何實(shí)現(xiàn)國(guó)際化2.編輯ApplicationRperties文件,在其中加入要使用國(guó)際化的信息,例e3.創(chuàng)建英文資源文件ApplicationResource_perites4.創(chuàng)建臨時(shí)中文資源文件ApplicationResource_perites例如:lable.welcom.china=中國(guó)歡迎您!行:native2ascii-encodinggb2312ApplicationResource_pertiesApplicationResource_zh_CN.properties<%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%>4.struts2.0的常用標(biāo)簽1.往action里傳值:<inputname="userName"type="text"class="input6"size="15">2.顯示標(biāo)簽property用于輸出指定值:<s:propertyvalue="userName"/><s:textname="user.userName"id="username"/>4.判斷<s:if></s:if>用于在頁(yè)面中判斷指定數(shù)據(jù)<s:iftest="userName==admin">….</s:if><s:else>….</s:else>siteratorList、Map、ArrayList等集合進(jìn)行循環(huán)遍歷<s:iteratorvalue="userList"id="user"status="u"><s:propertyvalue="userName"/></a></s:iterator><s:param>子元素向URL地址發(fā)送請(qǐng)求參數(shù)<s:urlaction=""><s:paramname=""value=""></s:param></s:url>7.超鏈接<ahref>一般和<s:url>標(biāo)簽一起使用,用于帶多個(gè)參數(shù)。<ahref="h<s:urlaction=""><s:paramname=""value=""></s:param><s:paramname=""value=""></s:param><s:paramname=""value=""></s:param></s:url><s:setname="user"value="userName"scope=”request”/>rmbeanactiontiles<<form-beans><form-beanname=""type=""></form-bean></form-beans><<action-mappings><actionpath=""attribute=""name=""parameter=""scope="request"type=""></action></action-mappings>input:輸入頁(yè)的路徑;onction<?xmlversion="1.0"encoding="UTF-8"?>Configuration1.1//EN""/struts/dtds/tiles-config_1_1.dtd"><tiles-definitions><definitionname="member-definition"path="/Jsp/layout.jsp"><putname="top"value="/mTop.do"/>h<putname="left"value="/mLeft.do"/><putname="main"value="/defaultMmain.do"/></definition></tiles-definitions>************<plug-inclassName="org.apache.struts.tiles.TilesPlugin"><set-propertyproperty="definitions-config"value="/WEB-INF/tiles-defs.xml"/><set-propertyproperty="definitions-parser-validate"value="true"/></plug-in>************************<init-param><param-name>definitions-config</param-name><param-value>/WEB-INF/tiles-defs.xml</param-value></init-param>**************************<actionpath="/member"parameter="member-definition"type="org.apache.struts.actions.ForwardAction"/>**************1.條件類型(沒標(biāo)注的都比較簡(jiǎn)單)logic:empty,logic:notEmpty;logic:equal,logic:notEqual,logic:lessThan,logic:greaterThan,logic:lessEqual,logic:greaterEqual;logic:present,logic:notPresent;logic:match,logic:notMatch;比較兩字符串是否相等,可以比較字符串的開始個(gè)部分。2.循環(huán)類型logic:iterateh3.轉(zhuǎn)發(fā)/重定向類型<global-forwards><forwardname="login"path="/loginForm.jsp"/></global-forwards>response.sendRedirect(),<logic:redirectname="login"paramId="employeeId"paramName="employee"property="id"/>action是單實(shí)例的。當(dāng)多個(gè)用戶訪問一個(gè)請(qǐng)求的時(shí)候,服務(wù)器內(nèi)存中只有一個(gè)與之對(duì)DispatchAction是Aciton的一個(gè)子類,主要解決了一個(gè)請(qǐng)求處理多個(gè)功能的問題舉一個(gè)小例子:有如下一個(gè)url:http://localhost:8080/myApp/addUserAction.do關(guān)操作,如果換成一下url:http://localhost:8080/myApp/UserAction.do?method=addhttp://localhost:8080/myApp/UserAction.do?method=deleteonh類里包含的多個(gè)屬性用于封裝用戶的請(qǐng)求參數(shù)。0.STRUTS的配置文件是什么?strutsstruts-config.xml<load-on-startup>0</load-on-startup>件,并創(chuàng)建用于封裝資源文件的MessageResources對(duì)象tContext中,對(duì)應(yīng)的屬性名中有該模塊名稱的相應(yīng)標(biāo)識(shí)。另外,如果有相應(yīng)配置的話,init方法還將初始化數(shù)據(jù)源和PlugInstresponse用用于子類重寫擴(kuò)展其功能。hhionstrutshibernate刪查改(機(jī)試)xStrutsStruts2動(dòng)的界面,隨著其他接口,使可選和定actionsupport執(zhí)行常用的接Struts象是實(shí)例對(duì)于每個(gè)對(duì)象不施加表現(xiàn)罰款,或影響垃圾收Struts,二是不耦合的一個(gè)貨表作為簡(jiǎn)單的地圖,讓行動(dòng),以測(cè)試陷可以使用原來的請(qǐng)求和響應(yīng),如果需eStruts1Struts求采取行動(dòng)班,以延長(zhǎng)Struts是編程抽象類而不是接Struts動(dòng)是單身,必須線程安Struts動(dòng)的資源,必須線程安全的或同步。班Servleth語言表達(dá)有約束力的價(jià)值觀納入意見控制行動(dòng)Struts1。由于其他的JavaBeans不能被用來作為actionforms,開發(fā)商常常造成多余的用來作為一種替代創(chuàng)造常規(guī)但相對(duì)薄弱的收集和索引財(cái)產(chǎn)的支約束力的物體進(jìn)入該網(wǎng)頁(yè)的背景下訪Struts持手冊(cè)審定通過驗(yàn)證方actionform個(gè)擴(kuò)展到同一階層,但不能鏈,以驗(yàn)證就分Struts的請(qǐng)求處理器 Struts以測(cè)試實(shí)例化的行持也使測(cè)試更簡(jiǎn)單。入屬性可能是豐富的對(duì)象類型可能有包括商業(yè)利益或域?qū)ο?,可以被用來作也支持一個(gè)更強(qiáng)大和靈活的語言表達(dá)所謂的“對(duì)象圖形符號(hào)語言” (ognl)。有耦合您的看法,以對(duì)象類型,這是渲見覆蓋的類型可能有相同的屬性名稱,框架包括轉(zhuǎn)換為基本和共同的對(duì)象類型和原始。的驗(yàn)證框架支持鏈接驗(yàn)證分為分性能的使用驗(yàn)證的定義為性能一流的類型。Struts創(chuàng)造不同的生命周期對(duì)每行動(dòng)的基礎(chǔ)上通過攔截堆疊。自定義棧,才能創(chuàng)造和使用不同的行hh14.Struts/webwork的工作機(jī)制,它有哪些標(biāo)簽瀏覽器發(fā)送請(qǐng)求,例如請(qǐng)求/mypage.action、/reports/myreport.pdf等。核心控制器FilterDispatcher根據(jù)請(qǐng)求決定調(diào)用合適的Action。Action只是一個(gè)控制器,它會(huì)調(diào)用業(yè)務(wù)邏輯組件來處理用戶的請(qǐng)求。erHibernate1.什么是Hibernate的并發(fā)機(jī)制?怎么去處理并發(fā)問題?a、Hibernate的Session對(duì)象是非線程安全的,對(duì)于單個(gè)請(qǐng)求,單個(gè)會(huì)話,單個(gè)的工作單元(即單個(gè)事務(wù),單個(gè)線程),它通常只使用一次,然后就丟棄。如果一個(gè)Session實(shí)例允許共并發(fā)運(yùn)行的,例如Httprequest,sessionbeans將會(huì)導(dǎo)致出現(xiàn)資源爭(zhēng)用。只要用戶足夠快的點(diǎn)擊瀏覽器的“刷新”,就會(huì)導(dǎo)致兩個(gè)并發(fā)運(yùn)行的線程使用同一個(gè)Session。b、多個(gè)事務(wù)并發(fā)訪問同一塊資源,可能會(huì)引發(fā)第一類丟失更新,臟讀,幻讀,不可重復(fù)讀,第二類丟失更新一系列的問題。解決方案:設(shè)置事務(wù)隔離級(jí)別。RepeatableRead:可重復(fù)讀ReadUncommitted:未提交數(shù)據(jù)讀。隔離級(jí)別最差設(shè)置鎖:樂觀鎖和悲觀鎖。樂觀鎖:使用版本號(hào)或時(shí)間戳來檢測(cè)更新丟失,在<class>的映射中設(shè)置optimistic-lock="all"可以在沒有版本或者時(shí)間戳屬性映射的情況下實(shí)現(xiàn)版本檢查,此時(shí)natehehLockMode.UPGRADE,LockMode.UPGRADE_NOWAIT,LockMode.READ;gorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'sessionFactory'definedinServletContextresource[/WEB-INF/applicationContext.xml]:Initializationofbeanfailed;nestedexceptionisorg.hibernate.MappingException:Repeatedcolumninmappingforentity:com.xindeco.myregister.pojo.MyRegisterInfocolumn:password(shouldbemappedwithinsert="false"update="false")<propertyname="password"type="java.lang.String"update="true"insert="true"access="property"column="password"length="32"<propertyname="repassword"type="java.lang.String"update="false"insert="false"access="property"column="password"length="32"org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'sessionFactory'definedinServletContextresource[/WEB-INF/applicationContext.xml]:Initializationofbeanfailed;nestedexceptionisorg.hibernate.PropertyNotFoundException:CouldnotfindagetterforIDinclassheLongid然后hql語句也是面向?qū)ο蟮?,它的查詢語句不是查詢數(shù)據(jù)庫(kù)而是查詢類的,這些實(shí)現(xiàn)te用Query.setFirstResult():設(shè)置要顯示的第一行數(shù)據(jù),Query.setMaxResults():設(shè)置要顯示的最后一行數(shù)據(jù)。notin(selecttabIdtop(2-1)*5fromtable);6.hibernate的對(duì)象的三種持久化狀態(tài),并給出解釋?不清楚hibernate的對(duì)象的三種持久化狀態(tài),只知道hibernate對(duì)象的三種狀態(tài),下面有介hibernate中一對(duì)多配置文件會(huì)相應(yīng)的映射為兩張表,并且它們之間的關(guān)系是一對(duì)多8.update()和saveOrUpdate()的區(qū)別?存在的話,就不能使用update()方法。果是持久化了的對(duì)象調(diào)用saveOrUpdate()則會(huì)9.hibernate的三種狀態(tài)之間如何轉(zhuǎn)換h當(dāng)對(duì)象由瞬時(shí)狀態(tài)(當(dāng)對(duì)象由瞬時(shí)狀態(tài)(Transient)轉(zhuǎn)變到save()時(shí),就變成了持久化狀態(tài)。sistent對(duì)象變成游離狀態(tài)(Detached),但數(shù)據(jù)庫(kù)中還是存在的。當(dāng)游離狀態(tài)(Detached)update()時(shí),又變?yōu)榱顺志脿顟B(tài)(Persistent)。tentdeleteTransient2.網(wǎng)絡(luò)連接可能出了問題3.連接配置錯(cuò)了5.LIB下加入相應(yīng)驅(qū)動(dòng),數(shù)據(jù)連接代碼是否有誤6.數(shù)據(jù)庫(kù)配置可能有問題7.當(dāng)前聯(lián)接太多了,服務(wù)器都有訪問人數(shù)限制的8.服務(wù)器的相應(yīng)端口沒有開,即它不提供相應(yīng)的服務(wù)9hibernate有哪些緩存,分別怎么使用?11.Hibernate介紹Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫(kù)。Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJBB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。Hibernate的核心接口一共有5個(gè),分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個(gè)核心接口在任何開發(fā)中都會(huì)用到。通過這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。下面對(duì)這五個(gè)核心接口分別加以介紹?!ession接口:Session接口負(fù)責(zé)執(zhí)行被持久化對(duì)象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫(kù)的交流,包含了很多常見的SQL語句。)。但需要注意的是Session對(duì)象是非線程安全的。同時(shí),Hibernate的session不同于JSP應(yīng)用中的HttpSession。這里當(dāng)使用session這個(gè)術(shù)語時(shí),其實(shí)指的是Hibernate中的session,而以后會(huì)將HttpSesion對(duì)象稱為用戶session?!essionFactory接口:SessionFactroy接口負(fù)責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建Session對(duì)象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級(jí)的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常只需要一個(gè)SessiohnFactory就夠,當(dāng)需要操作多個(gè)數(shù)據(jù)庫(kù)時(shí),可以為每個(gè)數(shù)據(jù)庫(kù)指定一個(gè)SessionFactory。h·Configuration接口:Configuration接口負(fù)責(zé)配置并啟動(dòng)Hibernate,創(chuàng)建SessionFactory對(duì)象。在Hibernate的啟動(dòng)的過程中,Configuration類的實(shí)例首先定位映射文檔位置、讀取配置,然后創(chuàng)建SessionFactory對(duì)象?!ransaction接口:Transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,開發(fā)人員也可以設(shè)計(jì)編寫自己的底層事務(wù)處理代碼?!uery和Criteria接口:Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢。它可以使用HQL語言或SQL語句兩種表達(dá)方式。12.Hibernate主鍵介紹AssignedAssigned方式由程序生成主鍵值,并且要在save()之前指定否則會(huì)拋出異常特點(diǎn):主鍵的生成值完全由用戶決定,與底層數(shù)據(jù)庫(kù)無關(guān)。用戶需要維護(hù)主鍵值,在調(diào)用session.save()之前要指定主鍵值。HiloHilo使用高低位算法生成主鍵,高低位算法使用一個(gè)高位值和一個(gè)低位值,然后把算法得到的兩個(gè)值拼接起來作為數(shù)據(jù)庫(kù)中的唯一主鍵。Hilo方式需要額外的數(shù)據(jù)庫(kù)表和字段提供高位值來源。默認(rèn)請(qǐng)況下使用的表是hibernate_unique_key,默認(rèn)字段叫作next_hi。next_hi必須有一條記錄否則會(huì)出現(xiàn)錯(cuò)誤。特點(diǎn):需要額外的數(shù)據(jù)庫(kù)表的支持,能保證同一個(gè)數(shù)據(jù)庫(kù)中主鍵的唯一性,但不能保證多個(gè)數(shù)據(jù)庫(kù)之間主鍵的唯一性。Hilo主鍵生成方式由Hibernate維護(hù),所以Hilo方式與底層數(shù)據(jù)庫(kù)無關(guān),但不應(yīng)該手動(dòng)修改hi/lo算法使用的表的值,否則會(huì)引起主鍵重復(fù)的異常。IncrementIncrement方式對(duì)主鍵值采取自動(dòng)增長(zhǎng)的方式生成新的主鍵值,但要求底層數(shù)據(jù)庫(kù)的支持Sequence。如Oracle,DB2等。需要在映射文件xxx.hbm.xml中加入Increment標(biāo)志符的設(shè)置。特點(diǎn):由Hibernate本身維護(hù),適用于所有的數(shù)據(jù)庫(kù),不適合多進(jìn)程并發(fā)更新數(shù)據(jù)庫(kù),適合單一進(jìn)程訪問數(shù)據(jù)庫(kù)。不能用于群集環(huán)境。IdentityIdentity當(dāng)時(shí)根據(jù)底層數(shù)據(jù)庫(kù),來支持自動(dòng)增長(zhǎng),不同的數(shù)據(jù)庫(kù)用不同的主鍵增長(zhǎng)方式。特點(diǎn):與底層數(shù)據(jù)庫(kù)有關(guān),要求數(shù)據(jù)庫(kù)支持Identity,如MySQl中是auto_increment,SQLServer中是Identity,支持的數(shù)據(jù)庫(kù)有MySql、SQLServer、DB2、Sybase和HypersonicSQL。Identity無需Hibernate和用戶的干涉,使用較為方便,但不便于在不同的數(shù)據(jù)庫(kù)之間移植程序。hSequenceSequence需要底層數(shù)據(jù)庫(kù)支持Sequence方式,例如Oracle數(shù)據(jù)庫(kù)等特點(diǎn):需要底層數(shù)據(jù)庫(kù)的支持序列,支持序列的數(shù)據(jù)庫(kù)有DB2、PostgreSql、Qracle、SAPDb等在不同數(shù)據(jù)庫(kù)之間移植程序,特別從支持序列的數(shù)據(jù)庫(kù)移植到不支持序列的數(shù)據(jù)庫(kù)需要修改配置文件NNativeNative主鍵生成方式會(huì)根據(jù)不同的底層數(shù)據(jù)庫(kù)自動(dòng)選擇Identity、Sequence、Hilo主鍵生成方式特點(diǎn):根據(jù)不同的底層數(shù)據(jù)庫(kù)采用不同的主鍵生成方式。由于Hibernate會(huì)根據(jù)底層數(shù)據(jù)庫(kù)采用不同的映射方式,因此便于程序移植,項(xiàng)目中如果用到多個(gè)數(shù)據(jù)庫(kù)時(shí),可以使用這種方式。UUIDUUID使用128位UUID算法生成主鍵,能夠保證網(wǎng)絡(luò)環(huán)境下的主鍵唯一性,也就能夠保證在不同數(shù)據(jù)庫(kù)及不同服務(wù)器下主鍵的唯一性。特點(diǎn);能夠保證數(shù)據(jù)庫(kù)中的主鍵唯一性,生成的主鍵占用比較多的存貯空間ForeignGUIDForeign用于一對(duì)一關(guān)系中。GUID主鍵生成方式使用了一種特殊算法,保證生成主鍵的唯一性,支持SQLServer和MySQL13.Hibernate源碼中幾個(gè)包的作用簡(jiǎn)要介紹net.sf.hibernate.*該包的類基本上都是接口類和異常類net.sf.hibernate.cache.*JCS的實(shí)現(xiàn)類netnet.sf.hibernate.cfg.*配置文件讀取類net.sf.hibernate.collection.*Hibernate集合接口實(shí)現(xiàn)類,例如List,Set,Bag等等,Hibernate之所以要自行編寫集合接口實(shí)現(xiàn)類是為了支持lazyloadingnetnet.sf.hibernate.connection.*幾個(gè)數(shù)據(jù)庫(kù)連接池的Providernet.sf.hibernate.dialect.*支持多種數(shù)據(jù)庫(kù)特性,每個(gè)Dialect實(shí)現(xiàn)類代表一種數(shù)據(jù)庫(kù),描述了該數(shù)據(jù)庫(kù)支持的數(shù)據(jù)類型和其它特點(diǎn),例如是否有AutoIncrement,是否有Sequence,是否有分頁(yè)sql等等net.sf.hibernate.eg.*Hibernate文檔中用到的例子net.sf.hibernate.engine.*這個(gè)包的類作用比較散netnet.sf.hibernate.expression.*HQL支持的表達(dá)式HQL實(shí)現(xiàn)net.sf.hibernate.hq.*net.sf.hibernate.id.*hnetnet.sf.hibernate.impl.*最核心的包,一些重要接口的實(shí)現(xiàn)類,如果Session,SessionFactory,Query等net.sf.hibernate.jca.*類net.sf.hibernate.jmx.*JCA支持,把Session包裝為支持JCA的接口實(shí)現(xiàn)我不懂JMX,只知道JMX是用來編寫AppServer的管理程序的,大概是JMX部分接口的實(shí)現(xiàn),使得AppServer可以通過JMX接口管理Hibernatenetnet.sf.hibernate.loader.*也是很核心的包,主要是生成sql語句的net.sf.hibernate.lob.*Blob和Clob支持netnet.sf.hibernate.mapping.*hbm文件的屬性實(shí)現(xiàn)net.sf.hibernate.metadata.*PO的Meta實(shí)現(xiàn)net.sf.hibernate.odmg.*ODMG是一個(gè)ORM標(biāo)準(zhǔn),這個(gè)包是ODMG標(biāo)準(zhǔn)的實(shí)現(xiàn)類netnet.sf.hibernate.persister.*核心包,實(shí)現(xiàn)持久對(duì)象和表之間的映射xy.*Proxy和LazyLoading支持net.sf.hibernate.ps.*該包是PreparedStatmentCachenet.sf.hibernate.sql.*生成JDBCsql語句的包net.sf.hibernate.test.*測(cè)試類,你可以用junit來測(cè)試Hibernatenet.sf.hibernate.tool.hbm2ddl.*用hbm配置文件生成DDLnet.sf.hibernate.transaction.*HibernateTransaction實(shí)現(xiàn)類net.sf.hibernate.type.*Hibernate中定義的持久對(duì)象的屬性的數(shù)據(jù)類型net.sf.hibernate.util.*一些工具類,作用比較散net.sf.hibernate.xml.*XML數(shù)據(jù)綁定14.緩存管理 Hibernate中提供了兩級(jí)Cache,第一級(jí)別的緩存是Session級(jí)別的緩存,它是屬于事務(wù)范圍的緩存。這一級(jí)別的緩存由hibernate管理的,一般情況下無需進(jìn)行干預(yù);第二級(jí)別的緩存是SessionFactory級(jí)別的緩存,它是屬于進(jìn)程范圍或群集范圍的緩存。這一級(jí)別的緩存可以進(jìn)行配置和更改,并且可以動(dòng)態(tài)加載和卸載。Hibernate還為查詢結(jié)果提供了一個(gè)查詢緩存,它依賴于第二級(jí)緩存。1.一級(jí)緩存和二級(jí)緩存的比較:第一級(jí)緩存第二級(jí)緩存存放數(shù)據(jù)的形式相互關(guān)聯(lián)的持久化對(duì)象對(duì)象的散裝數(shù)據(jù)緩存的范圍事務(wù)范圍,每個(gè)事務(wù)都有單獨(dú)的第一級(jí)緩存進(jìn)程范圍或集群范圍,緩存被同一個(gè)進(jìn)程或集群范圍內(nèi)的所有事務(wù)共享并發(fā)訪問策略由于每個(gè)事務(wù)都擁有單獨(dú)的第一級(jí)緩存,不會(huì)出現(xiàn)并發(fā)問題,無需提供并發(fā)訪問策略由于多個(gè)事務(wù)會(huì)同時(shí)訪問第二級(jí)緩存中相同數(shù)據(jù),因此必須提供適當(dāng)?shù)牟l(fā)訪問策略,來保證特定的事務(wù)隔離級(jí)別數(shù)據(jù)過期策略沒有提供數(shù)據(jù)過期策略。處于一級(jí)緩存中的對(duì)象永遠(yuǎn)不會(huì)過期,除非應(yīng)用程序顯式清空緩存或者清除特定的對(duì)象必須提供數(shù)據(jù)過期策略,如基于內(nèi)存的緩存中的對(duì)象的最大數(shù)目,允許對(duì)象處于緩存h中的最長(zhǎng)時(shí)間,以及允許對(duì)象處于緩存中的最長(zhǎng)空閑時(shí)間物理存儲(chǔ)介質(zhì)內(nèi)存內(nèi)存和硬盤。對(duì)象的散裝數(shù)據(jù)首先存放在基于內(nèi)在的緩存中,當(dāng)內(nèi)存中對(duì)象的數(shù)目達(dá)到數(shù)據(jù)過期策略中指定上限時(shí),就會(huì)把其余的對(duì)象寫入基于硬盤的緩存中。緩存的軟件實(shí)現(xiàn)在Hibernate的Session的實(shí)現(xiàn)中包含了緩存的實(shí)現(xiàn)由第三方提供,Hibernate僅提供了緩存適配器(CacheProvider)。用于把特定的緩存插件集成到Hibernate中。啟用緩存的方式只要應(yīng)用程序通過Session接口來執(zhí)行保存、更新、刪除、加載和查詢數(shù)據(jù)庫(kù)數(shù)據(jù)的操作,Hibernate就會(huì)啟用第一級(jí)緩存,把數(shù)據(jù)庫(kù)中的數(shù)據(jù)以對(duì)象的形式拷貝到緩存中,對(duì)于批量更新和批量刪除操作,如果不希望啟用第一級(jí)緩存,可以繞過HibernateAPI,直接通過JDBCAPI來執(zhí)行指操作。用戶可以在單個(gè)類或類的單個(gè)集合的粒度上配置第二級(jí)緩存。h如果類的實(shí)例被經(jīng)常讀但很少被修改,就可以考慮使用第二級(jí)緩存。只有為某個(gè)類或集合配置了第二級(jí)緩存,Hibernate在運(yùn)行時(shí)才會(huì)把它的實(shí)例加入到第二級(jí)緩存中。用用戶管理緩存的方式第一級(jí)緩存的物理介質(zhì)為內(nèi)存,由于內(nèi)存容量有限,必須通過恰當(dāng)?shù)臋z索策略和檢索方式來限制加載對(duì)象的數(shù)目。Session的evit()方法可以顯式清空緩存中特定對(duì)象,但這種方法不值得推薦。第二級(jí)緩存的物理介質(zhì)可以是內(nèi)存和硬盤,因此第二級(jí)緩存可以存放大量的數(shù)據(jù),數(shù)據(jù)過期策略的maxElementsInMemory屬性值可以控制內(nèi)存中的對(duì)象數(shù)目。管理第二級(jí)緩存主要包括兩個(gè)方面:選擇需要使用第二級(jí)緩存的持久類,設(shè)置合適的并發(fā)訪問策略:選擇緩存適配器,設(shè)置合適的數(shù)據(jù)過期策略。2.一級(jí)緩存的管理:當(dāng)應(yīng)用程序調(diào)用Session的save()、update()、savaeOrUpdate()、get()或load(),以及調(diào)用查詢接口的list()、iterate()或filter()方法時(shí),如果在Session緩存中還不存在相應(yīng)的對(duì)象,Hibernate就會(huì)把該對(duì)象加入到第一級(jí)緩存中。當(dāng)清理緩存時(shí),Hibernate會(huì)根據(jù)緩存中對(duì)象的狀態(tài)變化來同步更新新數(shù)據(jù)庫(kù)。Session為應(yīng)用程序提供了兩個(gè)管理緩存的方法:evict(Objectobj):從緩存中清除參數(shù)指定的持久化對(duì)象。clear():清空緩存中所有持久化對(duì)象。3.二級(jí)緩存的管理:3.1.Hibernate的二級(jí)緩存策略的一般過程如下:1)條件查詢的時(shí)候,總是發(fā)出一條select*fromtable_namewhere….(選擇所有字段)這樣的SQL語句查詢數(shù)據(jù)庫(kù),一次獲得所有的數(shù)據(jù)對(duì)象。2)把獲得的所有數(shù)據(jù)對(duì)象根據(jù)ID放入到第二級(jí)緩存中。3)當(dāng)Hibernate根據(jù)ID訪問數(shù)據(jù)對(duì)象的時(shí)候,首先從Session一級(jí)緩存中查;查不到,如果配置了二級(jí)緩存,那么從二級(jí)緩存中查;查不到,再查詢數(shù)據(jù)庫(kù),把結(jié)果按照ID放入到緩存。4)刪除、更新、增加數(shù)據(jù)的時(shí)候,同時(shí)更新緩存。Hibernate的二級(jí)緩存策略,是針對(duì)于ID查詢的緩存策略,對(duì)于條件查詢則毫無作用。為此,Hibernate提供了針對(duì)條件查詢的QueryCache。h3.2.什么樣的數(shù)據(jù)適合存放到第二級(jí)緩存中?1很少被修改的數(shù)據(jù)2不是很重要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù)3不會(huì)被并發(fā)訪問的數(shù)據(jù)4參考數(shù)據(jù),指的是供應(yīng)用參考的常量數(shù)據(jù),它的實(shí)例數(shù)目有限,它的實(shí)例會(huì)被許多其他類的實(shí)例引用,實(shí)例極少或者從來不會(huì)被修改。33.3.不適合存放到第二級(jí)緩存的數(shù)據(jù)?1經(jīng)常被修改的數(shù)據(jù)2財(cái)務(wù)數(shù)據(jù),絕對(duì)不允許出現(xiàn)并發(fā)3與其他應(yīng)用共享的數(shù)據(jù)。3.4.常用的緩存插件Hibernater的二級(jí)緩存是一個(gè)插件,下面是幾種常用的緩存插件:EhCache:可作為進(jìn)程范圍的緩存,存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤,對(duì)Hibernate的查詢緩存提供了支持。OSCache:可作為進(jìn)程范圍的緩存,存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤,提供了豐富的緩存數(shù)據(jù)過期策略,對(duì)Hibernate的查詢緩存提供了支持。SwarmCache:可作為群集范圍內(nèi)的緩存,但不支持Hibernate的查詢緩存。JBossCache:可作為群集范圍內(nèi)的緩存,支持事務(wù)型并發(fā)訪問策略,對(duì)Hibernate的查詢緩存提供了支持。3.5.配置二級(jí)緩存的主要步驟:1)選擇需要使用二級(jí)緩存的持久化類,設(shè)置它的命名緩存的并發(fā)訪問策略。這是最值得認(rèn)真考慮的步驟。2)選擇合適的緩存插件,然后編輯該插件的配置文件。SprinSpring控制反轉(zhuǎn)IOCAOP2.spring中的哪個(gè)類的哪個(gè)方法可用于獲取bean◆目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能簡(jiǎn)單來說,Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架?!糨p量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類?!艨刂品崔D(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過被動(dòng)的方式傳遞進(jìn)來,而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。h◆面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)()管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持?!羧萜鳌猄pring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用?!艨蚣堋猄pring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。g面向切面編程:主要是橫切一個(gè)關(guān)注點(diǎn),將一個(gè)關(guān)注點(diǎn)模塊化成一個(gè)切面。在切面上聲明一個(gè)通知(Advice)和切入點(diǎn)(Pointcut);通知:是指在切面的某個(gè)特定以使通知(Advice)的主體部分獲得連接點(diǎn)信息。)上執(zhí)行的動(dòng)作。通知中定義了要插入的方法。切入點(diǎn):切入點(diǎn)的內(nèi)容是一個(gè)表達(dá)式,以描述需要在哪些對(duì)象的哪些方法上插入通知中定義的方法。nga、定義一個(gè)事務(wù)管理器b、配置事務(wù)特性(相當(dāng)于聲明通知。一般在業(yè)務(wù)層的類的一些方法上定義事務(wù))c、配置哪些類的哪些方法需要配置事務(wù)(相當(dāng)于切入點(diǎn)。一般是業(yè)務(wù)類的方法上)讀取配置文件6.spring在項(xiàng)目中如何充當(dāng)粘合劑1、在項(xiàng)目中利用spring的IOC(控制反轉(zhuǎn)或依賴注入),明確地定義組件接口(如UserDAO),開發(fā)者可以獨(dú)立開發(fā)各個(gè)組件,然后根據(jù)組件間的依賴關(guān)系組裝(UserAction依的實(shí)現(xiàn))結(jié)合起來了。2、spring的事務(wù)管理把hibernate對(duì)數(shù)據(jù)庫(kù)的操作進(jìn)行了事務(wù)配置。7.spring的事務(wù)如何配置s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房企業(yè)消防安全培訓(xùn)課件
- 未來五年四星級(jí)飯店住宿市場(chǎng)需求變化趨勢(shì)與商業(yè)創(chuàng)新機(jī)遇分析研究報(bào)告
- 未來五年塑料大棚設(shè)施設(shè)備企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略分析研究報(bào)告
- 未來五年商品蓋印記、上標(biāo)簽服務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 未來五年新能源汽車驅(qū)動(dòng)電機(jī)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 未來五年郵政快遞服務(wù)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略分析研究報(bào)告
- 機(jī)械效率:從功的原理到能量觀念的進(jìn)階探究-初中物理(蘇科版九年級(jí))教學(xué)設(shè)計(jì)
- 河道擋墻護(hù)岸工程施工方案
- 基于單元主題的小學(xué)英語會(huì)話教學(xué)設(shè)計(jì)與實(shí)施-以“動(dòng)物正在做什么?”為例
- 醫(yī)療器械注冊(cè)流程與資料準(zhǔn)備指南
- 參軍心理測(cè)試題及答案
- 淘寶網(wǎng)店合同
- 以房抵工程款合同協(xié)議6篇
- GB/T 222-2025鋼及合金成品化學(xué)成分允許偏差
- 申報(bào)個(gè)稅申請(qǐng)書
- 中秋福利采購(gòu)項(xiàng)目方案投標(biāo)文件(技術(shù)方案)
- 固態(tài)電池技術(shù)在新能源汽車領(lǐng)域的產(chǎn)業(yè)化挑戰(zhàn)與對(duì)策研究
- 2025年廣電營(yíng)銷考試題庫(kù)
- 湖南省岳陽市平江縣2024-2025學(xué)年高二上學(xué)期期末考試語文試題(解析版)
- DB5101∕T 161-2023 公園城市鄉(xiāng)村綠化景觀營(yíng)建指南
- 2024-2025學(xué)年湖北省武漢市江漢區(qū)七年級(jí)(下)期末數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論