




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序員常見的問題解答1.Configuration接口的功能,主要作用?創(chuàng)建一個(gè)Configuration對(duì)象配置和啟動(dòng)hibernate框架創(chuàng)建SessionFactory對(duì)象的實(shí)例讀取hibernate.cfg.xml核心配置文件2.Hibernate持久化操作的七步?1.創(chuàng)建Configuration對(duì)象2.創(chuàng)建SessionFactory對(duì)象3.創(chuàng)建Session對(duì)象4.開始事物5.持久化操作6.提交事物7.關(guān)閉Session3.怎么樣使用HQL查詢方法?創(chuàng)建一個(gè)查詢createQuery()創(chuàng)建一個(gè)Query查詢接口的實(shí)例,該實(shí)例可以利用HQL語(yǔ)言來(lái)進(jìn)行數(shù)據(jù)庫(kù)的查詢操作。HOL語(yǔ)句要給createQuery()方法作為參數(shù)才可以讓Query方法來(lái)進(jìn)行查詢操作4.事務(wù)具有幾個(gè)基本特征,都是什么嗎?(ACID):1Atomic(原子性):事務(wù)中包含的操作被看做一個(gè)邏輯單元,這個(gè)邏輯單元中的操作要么全部成功,要么全部失敗。2Consistency(一致性):只有合法的數(shù)據(jù)可以被寫入數(shù)據(jù)庫(kù),否則事務(wù)應(yīng)該將其回滾到最初狀態(tài)。3Isolation(隔離性):事務(wù)允許多個(gè)用戶對(duì)同一個(gè)數(shù)據(jù)進(jìn)行并發(fā)訪問,而不破壞數(shù)據(jù)的正確性和完整性。同時(shí),并行事務(wù)的修改必須與其他并行事務(wù)的修改相互獨(dú)立。4Durability(持久性):事務(wù)結(jié)束后,事務(wù)處理的結(jié)果必須能夠得到固化。5.如果兩個(gè)事物并發(fā)運(yùn)行,就可能出現(xiàn)以上五種并發(fā)問題,都是什么?1第一類丟失更新(Lostupdate)2.臟讀?。―irtyReads):3.虛讀(PhantomReads)4.不可重復(fù)讀?。∟on-repeatableReads)5第二類丟失更新(Secondlostupdatesproblem)6.hibertnate中的關(guān)聯(lián)關(guān)系包括1.一對(duì)一的關(guān)聯(lián)模式2.一對(duì)多的關(guān)聯(lián)模式3.多對(duì)多的關(guān)聯(lián)模式7.怎么樣把映射表的xml文件配置到Hibernate核心配置文件中:<mappingresource="model/Student.hbm.xml"/>8.ORM全稱?(Object-RelationMapping)對(duì)象關(guān)系映射9.ORM的工作原理?把持久化類映射成數(shù)據(jù)庫(kù)中的表把對(duì)象映射成數(shù)據(jù)庫(kù)中表的一行記錄把對(duì)象的屬性映射成數(shù)據(jù)庫(kù)中表的字段10.Session接口的功能它是應(yīng)用程序與數(shù)據(jù)庫(kù)之間交互的但線程對(duì)象,一個(gè)session同樣對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),所以它是hibernate提供的與進(jìn)行持久化操作的對(duì)象(持久化操作為增,刪,改,查)同時(shí)它也是一個(gè)事物對(duì)象的工廠,及Transaction對(duì)象兩種創(chuàng)建方式11.session中最常用的幾種持久化操作的方法?save()delete()update()load()get()12.Session緩存的作用?1、減少訪問數(shù)據(jù)庫(kù)的頻率。2、保證緩存中的對(duì)象于數(shù)據(jù)庫(kù)中的相關(guān)記錄保持同步。當(dāng)緩存中持久化對(duì)象的狀態(tài)發(fā)生了變化,Session并不會(huì)立即執(zhí)行相關(guān)的SQL語(yǔ)句,而是在清理Session緩存時(shí)一并執(zhí)行13.什么是Hibernate的一級(jí)緩存,二級(jí)緩存一級(jí)緩存:Session、二級(jí)緩存:SessionFactory14.配置二級(jí)緩存的步驟1.選擇需要使用第二級(jí)緩存的持久化類,設(shè)置它的命名緩存的并發(fā)訪問策略2.選擇合適的緩存插件,每一種緩存插件都有自帶的配置文件需要手工編寫該配置文件15.hibernate框架提供的最常用的檢索方式?1.OID檢索方式、2.HQL檢索方式、3.SQL檢索方式16.HQL最常用的5種實(shí)用技術(shù)?1.實(shí)體查詢、2.屬性查詢、3.實(shí)體更新和刪除、4.排序、5.參數(shù)動(dòng)態(tài)綁定17實(shí)體對(duì)象的生命周期即三種狀態(tài)?Transient(瞬態(tài))、Persistent(持久態(tài))、Detached(游離態(tài))一個(gè)實(shí)體對(duì)象的實(shí)例通過不同的操作可以在這三種狀態(tài)之間相互轉(zhuǎn)換18.Persistent(持久態(tài))對(duì)象的特征?每個(gè)Persistent狀態(tài)的實(shí)體對(duì)象都與一個(gè)Session對(duì)象的實(shí)例相關(guān)聯(lián)。處于Persistent狀態(tài)的實(shí)體對(duì)象是與數(shù)據(jù)庫(kù)中的記錄相關(guān)聯(lián)的。Hibernate會(huì)依據(jù)Persistent狀態(tài)的實(shí)體對(duì)象的屬性變化而改變數(shù)據(jù)庫(kù)中相對(duì)應(yīng)的記錄。19.error和exception有什么區(qū)別?Error是錯(cuò)誤,exception是異常20.Hibernate中最常用的連接池組件?C3P0組件擴(kuò)展提1,如何在添加多方時(shí)建立hibernate中的級(jí)聯(lián)關(guān)系?擴(kuò)展提2,如何在刪除多方時(shí)解除hibernate的級(jí)聯(lián)關(guān)系?擴(kuò)展提3,<set>有什么作用?建立關(guān)系使用的關(guān)鍵字?jǐn)U展提4,<set中的Inverse和cascade都是什么意思,分別能添什么屬性?>Inverse:設(shè)置關(guān)系的維護(hù)端,如果為true,則把對(duì)方設(shè)為維護(hù)端Cascade:設(shè)置級(jí)聯(lián)屬性:有deletesave-updateall21.ajax的全稱?異步的javascript和xmlAsynchronismjavaScriptAndXML22.ajax是由什么技術(shù)組成的?Html,javascript.DHTML和DOM組成23.ajax的核心技術(shù)是什么?JavaScript24.ajax核心的對(duì)象?XMLHttpRequest25.ajax以什么樣的方式發(fā)送請(qǐng)求?異步的方式26.XMLHttpRequest調(diào)用什么方法來(lái)建立連接?Open()27.XMLHttpRequest以什么樣的方式發(fā)送請(qǐng)求?Send()28.XMLHttpRequest在不同的版本瀏覽器中是否有不同的new法?是29.readyState:提供當(dāng)前HTML的就緒狀態(tài)?0-(未初始化)還沒有調(diào)用send()方法1-(載入)已調(diào)用send()方法,正在發(fā)送請(qǐng)求2-(載入完成)send()方法執(zhí)行完成,已經(jīng)接收到全部響應(yīng)內(nèi)容3-(交互)正在解析響應(yīng)內(nèi)容4-(完成)響應(yīng)內(nèi)容解析完成,可以在客戶端調(diào)用了30.XMLHttpRequest用什么方法來(lái)規(guī)定處理響應(yīng)請(qǐng)求的方法?XMLHttpRequest.onreadystatechange=updatePage;1、Spring實(shí)化例對(duì)象的幾種方法使用類構(gòu)造器方法、使用靜態(tài)工廠方法、使用實(shí)例工廠方法2、Spring注入對(duì)象的幾種方法構(gòu)造函數(shù)注入、屬性注入、工廠方法注入、注解注入3、什么是控制反轉(zhuǎn)應(yīng)用本身不負(fù)責(zé)依賴對(duì)象的創(chuàng)建及維護(hù),依賴對(duì)象的創(chuàng)建及維護(hù)是由外部容器負(fù)責(zé)的,這樣控制權(quán)就由應(yīng)用本身轉(zhuǎn)移到了外部容器,控制權(quán)的轉(zhuǎn)移就是所謂的控制反轉(zhuǎn)。4、什么是依賴注入在運(yùn)行期,由外部容器動(dòng)態(tài)地將依賴對(duì)象注入到組件中5、什么是SpringSpring是一個(gè)開源的控制反轉(zhuǎn)和面向切面的容器框架,它的主要目的是簡(jiǎn)化企業(yè)開發(fā)。6、Spring的主要功能組成Spring框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(IOC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開。Spring上下文:Spring上下文是一個(gè)配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。SpringAOP:通過配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何對(duì)象支持AOP。SpringAOP模塊為基于Spring的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過使用SpringAOP,不用依賴EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。SpringDAO:JDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結(jié)構(gòu)。SpringORM:Spring框架插入了若干個(gè)ORM框架,從而提供了ORM的對(duì)象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務(wù)和DAO異常層次結(jié)構(gòu)。SpringWeb模塊:Web上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于Web的應(yīng)用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ?。SpringMVC框架:MVC框架是一個(gè)全功能的構(gòu)建Web應(yīng)用程序的MVC實(shí)現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術(shù),其中包括JSP、Velocity、Tiles、iText和POI。7、Spring主要管理Web程序中的什么代替工廠管理對(duì)象組成Spring框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(IOC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開。Spring上下文:Spring上下文是一個(gè)配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。SpringAOP:通過配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何對(duì)象支持AOP。SpringAOP模塊為基于Spring的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過使用SpringAOP,不用依賴EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。SpringDAO:JDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打和開關(guān)閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結(jié)構(gòu)。SpringORM:Spring框架插入了若干個(gè)ORM框架,從而提供了ORM的對(duì)象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務(wù)和DAO異常層次結(jié)構(gòu)。SpringWeb模塊:Web上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于Web的應(yīng)用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌pringMVC框架:MVC框架是一個(gè)全功能的構(gòu)建Web應(yīng)用程序的MVC實(shí)現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術(shù),其中包括JSP、Velocity、Tiles、iText和POI。Spring框架的功能可以用在任何J2EE服務(wù)器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring的核心要點(diǎn)是:支持不綁定到特定J2EE服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問對(duì)象。毫無(wú)疑問,這樣的對(duì)象可以在不同J2EE環(huán)境(Web或EJB)、獨(dú)立應(yīng)用程序、測(cè)試環(huán)境之間重用。struts2有以下優(yōu)點(diǎn):1>Struts2沒有像struts1那樣跟ServletAPI和strutsAPI有著緊密的耦合,Struts2的應(yīng)用可以不依賴于ServletAPI和strutsAPI。Struts2的這種設(shè)計(jì)屬于無(wú)侵入式設(shè)計(jì),而Struts1卻屬于侵入式設(shè)計(jì)。publicclassOrderListActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{}}2>Struts2提供了攔截器,利用攔截器可以進(jìn)行AOP編程,實(shí)現(xiàn)如權(quán)限攔截等功能。3>Strut2提供了類型轉(zhuǎn)換器,我們可以把特殊的請(qǐng)求參數(shù)轉(zhuǎn)換成需要的類型。在Struts1中,如果我們要實(shí)現(xiàn)同樣的功能,就必須向Struts1的底層實(shí)現(xiàn)BeanUtil行才。4>Struts2提供支持多種表現(xiàn)層技術(shù),如:JSP、freeMarker、Velocity等5>Struts2的輸入校驗(yàn)可以對(duì)指定方法進(jìn)行校驗(yàn),解決了Struts1長(zhǎng)久之痛。搭建Struts2環(huán)境時(shí),我們一般需要做以下幾個(gè)步驟的工作:1》找到開發(fā)Struts2應(yīng)用需要使用到的jar文件.2》編寫Struts2的配置文件3》在web.xml中加入Struts2MVC框架啟動(dòng)配置struts2.1以后就需要fileupload的jar包通過包來(lái)管理功能相似的模塊在struts1中,通過<actionpath=“/test/helloworld節(jié)點(diǎn)的”>path屬性指定訪問該action的URL路徑。在struts2中,情況就不是這樣了,訪問struts2中的action的URL路徑由兩部份組成:包的命名空間+action的名稱,例如訪問本例子HelloWorldAction的URL路徑為:/test/helloworld(注意:完整路徑為:http://localhost:端口/內(nèi)容路徑/test/helloworld)。另外我們也可以加上.action后綴訪問此Action。常用的常量定義<!--指定默認(rèn)編碼集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker、velocity的輸出--><constantname="struts.i18n.encoding"value="UTF-8"/><!--該屬性指定需要Struts2處理的請(qǐng)求后綴,該屬性的默認(rèn)值是action,即所有匹配*.action的請(qǐng)求都由Struts2處理。如果用戶需要指定多個(gè)請(qǐng)求后綴,則多個(gè)后綴之間以英文逗號(hào)(,)隔開。--><constantname="struts.action.extension"value="do"/><!--設(shè)置瀏覽器是否緩存靜態(tài)內(nèi)容,默認(rèn)值為true(生產(chǎn)環(huán)境下使用),開發(fā)階段最好關(guān)閉--><constantname="struts.serve.static.browserCache"value="false"/><!--當(dāng)struts的配置文件修改后,系統(tǒng)是否自動(dòng)重新加載該文件,默認(rèn)值為false(生產(chǎn)環(huán)境下使用),開發(fā)階段最好打開--><constantname="struts.configuration.xml.reload"value="true"/><!--開發(fā)模式下使用,這樣可以打印出更詳細(xì)的錯(cuò)誤信息--><constantname="struts.devMode"value="true"/><!–與spring集成時(shí),指定由spring負(fù)責(zé)action對(duì)象的創(chuàng)建--><constantname="struts.objectFactory"value="spring"/><!–該屬性設(shè)置Struts2是否支持動(dòng)態(tài)方法調(diào)用,該屬性的默認(rèn)值是true。如果需要關(guān)閉動(dòng)態(tài)方法調(diào)用,則可設(shè)置該屬性為false。--><constantname="struts.enable.DynamicMethodInvocation"value="false"/><!--上傳文件的大小限制--><constantname="struts.multipart.maxSize"value=“10701096"/>基于網(wǎng)頁(yè)上傳文件大小不要超過5M否則應(yīng)考慮開發(fā)插件來(lái)保證上傳的穩(wěn)定struts2對(duì)于每一個(gè)請(qǐng)求,都會(huì)創(chuàng)建一個(gè)新的actionstruts1:create-->cache動(dòng)態(tài)方法調(diào)用(不推薦使用該方法,建議關(guān)閉)<constantname="struts.enable.DynamicMethodInvocation"value="false"/>使用通配符定義action自定義類型轉(zhuǎn)換器ActionContext:TheActionContextisthecontextinwhichanActionisexecuted.Eachcontextisbasicallyacontainerofobjectsanactionneedsforexecutionlikethesession,parameters,locale,etc.TheActionContextisthreadlocalwhichmeansthatvaluesstoredintheActionContextareuniqueperthread.SeetheThreadLocalclassformoreinformation.Thebenefitofthisisyoudon'tneedworryaboutauserspecificactioncontext,youjustgetit:ActionContextcontext=ActionContext.getContext();Finally,becauseofthethreadlocalusageyoudon'tneedtoworryaboutmakingyouractionsthreadsafe.ServletActionContext:Web-specificcontextinformationforactions.ThisclasssubclassesActionContextwhichprovidesaccesstothingsliketheactionname,valuestack,etc.Thisclassaddsaccesstowebobjectsservletparameters,requestattributesandthingsliketheHTTPsession.文件上傳FileUtils工具類自定義攔截器攔截器棧因?yàn)閟truts2中如文件上傳,數(shù)據(jù)驗(yàn)證,封裝請(qǐng)求參數(shù)到action等功能都是由系統(tǒng)默認(rèn)的defaultStack中的攔截器實(shí)現(xiàn)的,所以我們定義的攔截器需要引用系統(tǒng)默認(rèn)的defaultStack,這樣應(yīng)用才可以使用struts2框架提供的眾多功能。如果希望包下的所有action都使用自定義的攔截器,可以通過<default-interceptor-refname=“permissionStack”把/>攔截器定義為默認(rèn)攔截器。注意:每個(gè)包只能指定一個(gè)默認(rèn)攔截器。另外,一旦我們?yōu)樵摪械哪硞€(gè)action顯式指定了某個(gè)攔截器,則默認(rèn)攔截器不會(huì)起作用。文章分為十三個(gè)小塊兒對(duì)Hibernate性能優(yōu)化技巧進(jìn)行總結(jié)性分析,分析如下:一、在處理大數(shù)據(jù)量時(shí),會(huì)有大量的數(shù)據(jù)緩沖保存在Session的一級(jí)緩存中,這緩存大太時(shí)會(huì)嚴(yán)重顯示性能,所以在使用Hibernate處理大數(shù)據(jù)量的,可以使用session.clear()或者session.evict(Object)在處理過程中,清除全部的緩存或者清除某個(gè)對(duì)象。二、對(duì)大數(shù)據(jù)量查詢時(shí),慎用list()或者iterator()返回查詢結(jié)果,<1>.使用List()返回結(jié)果時(shí),Hibernate會(huì)所有查詢結(jié)果初始化為持久化對(duì)象,結(jié)果集較大時(shí),會(huì)占用很多的處理時(shí)間。<2>.而使用iterator()返回結(jié)果時(shí),在每次調(diào)用iterator.next()返回對(duì)象并使用對(duì)象時(shí),Hibernate才調(diào)用查詢將對(duì)應(yīng)的對(duì)象初始化,對(duì)于大數(shù)據(jù)量時(shí),每調(diào)用一次查詢都會(huì)花費(fèi)較多的時(shí)間。當(dāng)結(jié)果集較大,但是含有較大量相同的數(shù)據(jù),或者結(jié)果集不是全部都會(huì)使用時(shí),使用iterator()才有優(yōu)勢(shì)。<3>.對(duì)于大數(shù)據(jù)量,使用qry.scroll()可以得到較好的處理速度以及性能。而且直接對(duì)結(jié)果集向前向后滾動(dòng)。三、對(duì)于關(guān)聯(lián)操作,Hibernate雖然可以表達(dá)復(fù)雜的數(shù)據(jù)關(guān)系,但請(qǐng)慎用,使數(shù)據(jù)關(guān)系較為簡(jiǎn)單時(shí)會(huì)得到較好的效率,特別是較深層次的關(guān)聯(lián)時(shí),性能會(huì)很差。四、對(duì)含有關(guān)聯(lián)的PO(持久化對(duì)象)時(shí),若default-cascade="all"或者“save-update”,新增PO時(shí),請(qǐng)注意對(duì)PO中的集合的賦值操作,因?yàn)橛锌赡苁沟枚鄨?zhí)行一次update操作。五、在一對(duì)多、多對(duì)一的關(guān)系中,使用延遲加載機(jī)制,會(huì)使不少的對(duì)象在使用時(shí)才會(huì)初始化,這樣可使得節(jié)省內(nèi)存空間以及減少數(shù)據(jù)庫(kù)的負(fù)荷,而且若PO中的集合沒有被使用時(shí),就可減少互數(shù)據(jù)庫(kù)的交互從而減少處理時(shí)間。六、對(duì)于大數(shù)據(jù)量新增、修改、刪除操作或者是對(duì)大數(shù)據(jù)量的查詢,與數(shù)據(jù)庫(kù)的交互次數(shù)是決定處理時(shí)間的最重要因素,減少交互的次數(shù)是提升效率的最好途徑,所以在開發(fā)過程中,請(qǐng)將show_sql設(shè)置為true,深入了解Hibernate的處理過程,嘗試不同的方式,可以使得效率提升。七、Hibernate是以JDBC為基礎(chǔ),但是Hibernate是對(duì)JDBC的優(yōu)化,其中使用Hibernate的緩沖機(jī)制會(huì)使性能提升,如使用二級(jí)緩存以及查詢緩存,若命中率較高明,性能會(huì)是到大幅提升。八、Hibernate可以通過設(shè)置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等屬性,對(duì)Hibernate進(jìn)行優(yōu)化。九、不過值得注意的是,一些數(shù)據(jù)庫(kù)提供的主鍵生成機(jī)制在效率上未必最佳,大量并發(fā)insert數(shù)據(jù)時(shí)可能會(huì)引起表之間的互鎖。數(shù)據(jù)庫(kù)提供的主鍵生成機(jī)制,往往是通過在一個(gè)內(nèi)部表中保存當(dāng)前主鍵狀態(tài)(如對(duì)于自增型主鍵而言,此內(nèi)部表中就維護(hù)著當(dāng)前的最大值和遞增量),之后每次插入數(shù)據(jù)會(huì)讀取這個(gè)最大值,然后加上遞增量作為新記錄的主鍵,之后再把這個(gè)新的最大值更新回內(nèi)部表中,這樣,一次Insert操作可能導(dǎo)致數(shù)據(jù)庫(kù)內(nèi)部多次表讀寫操作,同時(shí)伴隨的還有數(shù)據(jù)的加鎖解鎖操作,這對(duì)性能產(chǎn)生了較大影響。因此,對(duì)于并發(fā)Insert要求較高的系統(tǒng),推薦采用uuid.hex作為主鍵生成機(jī)制。十、DynamicUpdate如果選定,生則成UpdateSQL時(shí)不包含未發(fā)生變動(dòng)的字段屬性,這樣可以在一定程度上提升SQL執(zhí)行效能.DynamicInsert如果選定,生則成InsertSQL時(shí)不包含未發(fā)生變動(dòng)的字段屬性,這樣可以在一定程度上提升SQL執(zhí)行效能十一、在編寫代碼的時(shí)候請(qǐng),對(duì)將POJO的getter/setterprivate,Hibernate將無(wú)法對(duì)屬性的存取進(jìn)行優(yōu)化,只能轉(zhuǎn)而采用傳統(tǒng)的反射機(jī)制進(jìn)行操作,這將導(dǎo)致大量的性能開銷(特別是在1.4之前的SunJDK版本以及IBMJDK中,反射所帶來(lái)方法設(shè)定為public,如果設(shè)定為的系統(tǒng)開銷相當(dāng)可觀)。十二、在one-to-many關(guān)系中,將many一方設(shè)為主動(dòng)方(inverse=false)將有助性能的改善。十三、由于多對(duì)多關(guān)聯(lián)的性能不佳(由于引入了中間表,一次讀取操作需要反復(fù)數(shù)次查詢),因此在設(shè)計(jì)中應(yīng)該避免大量使用。十四、Hibernate支持兩種鎖機(jī)制:即通常所說(shuō)的“悲觀鎖(PessimisticLocking)”和“樂觀鎖(OptimisticLocking)”。悲觀鎖帶來(lái)數(shù)據(jù)庫(kù)性能的大量開銷,特別是對(duì)長(zhǎng)事務(wù)而言,這樣的開銷往往無(wú)法承受。樂觀鎖機(jī)制在一定程度上解決了這個(gè)問題.樂觀鎖機(jī)制避免了長(zhǎng)事務(wù)中的數(shù)據(jù)庫(kù)加鎖開銷,大大提升了大并發(fā)量下的系統(tǒng)整體性能表現(xiàn)。以上便是對(duì)Hibernate性能優(yōu)化技巧總結(jié),希望能對(duì)您有所幫助優(yōu)化hibernate性能的幾點(diǎn)建議1、針對(duì)oracle數(shù)據(jù)庫(kù)而言,F(xiàn)etchSize是設(shè)定JDBC的Statement讀取數(shù)據(jù)的時(shí)候每次從數(shù)據(jù)庫(kù)中取出的記錄條數(shù),一般設(shè)置為30、50、100。Oracle數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)默認(rèn)的FetchSize=15,設(shè)置FetchSize設(shè)置為:30、50,性能會(huì)有明顯提升,如果繼續(xù)增大,超出100,性能提升不明顯,反而會(huì)消耗內(nèi)存。即在hibernate配制文件中進(jìn)行配制:1<propertyname="hibernateProperties">2<props>3<propkey="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>4<propkey="hibernate.show_sql">fals
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 郊區(qū)個(gè)人精裝修房租賃合同5篇
- 外墻寫字涂料施工方案
- 混凝土樓面施工方案圖片
- 路面破碎施工方案
- 石材混凝土露臺(tái)施工方案
- 襯塑鋼管施工方案
- 河塘施工方案
- 智能電動(dòng)窗簾盒施工方案
- 寧波日式屋頂花園施工方案
- 廣西陽(yáng)臺(tái)垂直綠化施工方案
- 市政供水管線保護(hù)專項(xiàng)施工方案
- 學(xué)校“壯族三月三”活動(dòng)工作方案
- 名詞性從句、定語(yǔ)從句、狀語(yǔ)從句高考真題+詳細(xì)解析
- 第單元 世界民族之聲(一)-《星星索》課件 湘教版初中音樂八年級(jí)下冊(cè)
- 2023年青島職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)模擬試題及答案解析
- 第一課《不經(jīng)歷風(fēng)雨怎能見彩虹》課件
- 高新技術(shù)企業(yè)自評(píng)表
- 中國(guó)十二生肖文化-英文版
- 全科醫(yī)學(xué)課件:第四章 以人為中心的健康照顧
- 國(guó)家開放大學(xué)《城市管理學(xué)》形考任務(wù)1-4試題及答案
- YY/T 1282-2022一次性使用靜脈留置針
評(píng)論
0/150
提交評(píng)論