幫助手冊1hibernate文章面試題_第1頁
幫助手冊1hibernate文章面試題_第2頁
幫助手冊1hibernate文章面試題_第3頁
幫助手冊1hibernate文章面試題_第4頁
幫助手冊1hibernate文章面試題_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

立即檢索延遲檢索象導航到與它關(guān)聯(lián)的對象。2select數(shù)目少;缺點:1可能會加載應用程序不需要的對象,白白浪費許多內(nèi)存空間;2復雜的數(shù)據(jù)庫表連接也會影如何在控制臺看到hibernate生成并執(zhí)行的在定義數(shù)據(jù)庫和數(shù)據(jù)庫屬性的文件applicationConfig.xml面,把hibernate.show_sql設(shè)置為這樣生成的SQL現(xiàn) 需要在session.closesession.disconnect()被調(diào)用Nonstrictread/write:Transactional:用在JTAhibernatesortedcollectionorderedcollectionsortedcollection是在內(nèi)存中通過javaorderedcollection通過orderby序springhibernatestruts(含答案)Hibernate并解析映射信息,創(chuàng)建打開創(chuàng)建事務關(guān)閉關(guān)閉對JDBC數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)層繁瑣的重復性代碼2HibernateHibernate2:a)實體對象b)集合Hibernate3Hibernate的表與類都映射在一起,它們通過配置文件中的many-to-one、one-to-many、many-to-many、第緩存的實Sql、Criteria,objectcomposition1、查2、3、查4、查5、函StrutsStruts?Struts程web初始化ActionServlet,ActionServlet當ActionServlet接收到一個客戶請求時,將執(zhí)行如程.-(2)如果ActionFormActionForm象,把客戶提交的表單數(shù)據(jù)保存對象中-(4)如果ActionFormvalidatenull回一個不包含ActionMessageActuibErrors象,就表示表單驗證成功;-(5)ActionServlet根據(jù)ActionMap所包含的映射信息決定將請求轉(zhuǎn)發(fā)給哪個Action,如果相應的Action在,就先創(chuàng)建這個實例,然后調(diào)用Action的execute()方法;-(6)Action的execute()返回一個ActionForward對象,ActionServlet在把客戶請求轉(zhuǎn)發(fā)給ActionForwardJSP-(7)ActionForward對象指向JSP組件生成頁,返回給客戶;為什么要用Struts:MVC模式:web應用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配置好的的設(shè)置決定是否需要表單驗證,如果需要就調(diào)用ActionFormValidate()驗證后選擇將請求發(fā)送到哪法。Execute()從ActionForm對象中獲取數(shù)據(jù),完成業(yè)務邏輯,返回一個ActionForward對象,springmvcDispatcherServlet,它會委托應用系統(tǒng)的其他模塊負責負責對請求DispatcherServlet查詢一個或多個HandlerMap,找到處理請求的Controller.3.DispatcherServletControllerDispathcherViewResolverModelAndView對為什么用Spring:{AOP讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點,稱為橫切關(guān)注點,并將它們插入到應用程序代碼中。使用AOP后,公共服務(比)就可以分解成方面并應用到域?qū)ο笊?,同時不會增IOC允許創(chuàng)建一個可以構(gòu)造對象的應用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。正如單詞置表(straightconstruction)一個對象都是用其協(xié)作對象構(gòu)造的。因此是由容器管理協(xié)作對象只要用JavaBean屬性和配置文件加入依賴性(協(xié)作對象)。然后可以很容易地在需要時替換具有類似接*hibernate3:hql、條件查詢QBC(QueryByCriteriasql(通過createSQLQuery立inverse屬性默認是false,就是說關(guān)系的兩端都來關(guān)系比如Student和Teacher是多對多關(guān)系,用一個中間表TeacherStudent。操作TeacherStudent(中間表)。只有Teacherinverse=”true”是不對的,會導致任何操作都不觸發(fā)對中間表的影響;當兩邊都inverse=”false”說說Hibernate中的update()和saveOrUpdate()的區(qū)別,session的load()和get()的區(qū)別。saveOrUpdate()方法可以實現(xiàn)update()的功能,但會多些步驟,具體如下:一個異常;以上皆不符合則調(diào)用update()更新之。如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方拋出一個ObjectNotFoundException;load方法可返回實體的類實例,而get方法直接返回實體類;load方法可以充分利用內(nèi)部緩存和二級緩存中的現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進行數(shù)據(jù)查找,如沒有發(fā)現(xiàn)對應數(shù)據(jù),將越過二級緩存,直接調(diào)用SQL完成數(shù)據(jù)。*hibernate瞬時態(tài)(Transient(Persistent(DetachedPO(PersistenceObject),瞬時對象和脫管對象也稱為VO(ValueObject)。new間的javaeg.=new(”amigo”,“女”);如果沒有變量對該對象進行,它將被java虛擬機回收??赏ㄟ^sessionsavesaveOrUpdate()方法將瞬時對象與數(shù)據(jù)庫相關(guān)聯(lián),并將數(shù)據(jù)對應的插入數(shù)據(jù)處于該狀態(tài)的對象在數(shù)據(jù)庫中具有對應的記錄,并擁有一個持久化標識。如果是用hibernate的delete()管對象,此時該對象雖然具有數(shù)據(jù)庫識別值,但它已不在HIbernate下。session脫管對象擁有數(shù)據(jù)庫的識別值,可通過update()、saveOrUpdate()等方法,轉(zhuǎn)變成持久對象。比瞬時對象多了一個數(shù)據(jù)庫記錄標識值。4RESA3ESDetachedObject(游離對象)可以傳遞到任何層直到表現(xiàn)層而不是用任何DTO(DataTransfer然后你還可以重新把游離對象賦給另外一個JDBChibernateibatis手動寫delete、insert、update出傳到sql,不能直接傳入一個對象ibatis特點:半自動化sql動寫不寫sql,自動封裝hibernate<classname=”Users”table=”users”discriminator-<discriminatorcolumn=”DISCRIMINATOR_USERTYPE”<subclassname=”admin”discriminator-<propertyname=”adminRemark”column=”admin_remark”type=”string”3、兩個表,子類父類的主鍵,公共的字段或?qū)傩?lt;classname=”Users”<idname=”userid”column=”USERID”<generator<propertyname=”pwd”column=”pwd”type=”string”<joined-subclassname=”Guest”<key<propertyname=”guestRemark”column=”guest_remark”type=”string”批量刪Queryquery=session.createQuery(”update”或1詢Queryquery=session.createQuery(”selectcustomername,customeridfromListFor(int{Obejct[]object=(Object[])l.get(i); }}分組selectcount(*),productnamefromProductgroupbyproductnameorderbyproductname”<queryfromProductwhereQuery聯(lián)接”fromCustomerascustomerjoinfetchcustomer.buySet”:將多的放到buySet結(jié)是Customer,Buy聯(lián)接“fromCustomerascustomerjoincustomer.buySet”:得出的對象,customerbuy1子查詢”fromCustomerascustomerwhere(selectcount(*)fromhibernateCriteriaDetachedCriteriaCriteriac=session.createCriteria(Customer.class);DetachedCriteria需要DetachedCriteriadc=DetachedCriteria.forClass(Customer.class)Criteriac=Dc.getExecutableCriteria(session)hibernateinverse=falseinverse=true是被控方,外鍵與它沒關(guān)系**hibernate Queryq=CreateQuery(“fromCustomerwhereMyEclipsehibernate1.Db-browers*面試中常出現(xiàn)的兩個hibernatehibernate數(shù)就是Bean(type1filed1,type2field2),然后在hql這個bean用Session.load/get方法均可以根據(jù)指定的實體類和id從數(shù)據(jù)庫記錄,并返回與之對應的實體對象。如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方拋出一個ObjectNotFoundException。Load方法可返回實體的類實例,而get方法直接返回實體類。聯(lián)實體的數(shù)據(jù),也稱為內(nèi)部緩存。而第二級緩存則存在于SessionFactory層次,由當前所有由本則返回nullNonExists”記錄了當前Session詢條件(相當于一個查詢列表)。如此一來,如果Session中一個無效的查詢條件重復出現(xiàn),即可如在緩存中未發(fā)現(xiàn)有效數(shù)據(jù),則發(fā)起數(shù)據(jù)庫查詢操作(SelectSQL),如經(jīng)過查詢未發(fā)現(xiàn)對應記錄,則將此次查詢的信息在“NonExistsnull。根據(jù)映射配置和SelectSQL到的ResultSet,創(chuàng)建對應的數(shù)據(jù)對象。將其數(shù)據(jù)對象納入當前Session(一級緩存)。執(zhí)行Interceptor.onLoad(如果有對應的Interceptor)。如果數(shù)據(jù)對象實現(xiàn)了LifeCycle對象的onLoad通過hi/lo態(tài)Sequence庫,如Oracle后每次需要生成主鍵的時候?qū)⒋酥导?同一個數(shù)據(jù)庫,那么由于各個實例各自主鍵狀態(tài),不同實例可能生成同樣的主鍵,從而造成主鍵重復采用數(shù)據(jù)庫提供的主鍵生成機制。如DB2、SQLServer、MySQL的主鍵生成機制采用數(shù)據(jù)庫提供的sequenceOralce中的SequenceHibernate斷采用identity、hilo、sequence式Hibernate于128法生成16(編碼后以長度32這10中生成OIDncrmentHiernteHibrnatedenityntive讓Hberate來幫選擇denityseqenc,或hlo.另外由于常用的數(shù)據(jù)庫,如Oracle、DB2、SQLServer、MySql等,都提供了易用的主鍵生成機制(Auto-字段增型主鍵而言,此內(nèi)部表中就著當前的最大值和遞增量),之后每次插入數(shù)據(jù)會這個最大值,然對于并發(fā)Insert薦采用uuid.hex作為主鍵生成機制*springspringIOC有三種注入方式第一是根據(jù)屬性注入也叫set2、SpringBean答、SpringStruts僅是MVC重于MVC中的C。Spring整合Struts:使用Spring的ActionSupport類整合Struts;使用Spring的DelegatingRequestProcessor覆蓋Struts的RequestProcessor;將StrutsAction管理委托給Spring框架,動作委托最好。(詳見使用Spring更好地處Struts動作)Spring2.0新增式:AutowiringRequestProcessor(詳見http 4、Hibernate中的update()和saveOrUpdate()的區(qū)別答、saveOrUpdate()方法可以實現(xiàn)update()的功能,但會多些步驟,具體如下:如果對象在該session作;對象的標識符屬性(identifierproperty調(diào)用save()方法保存它;如果session以上皆不符合則調(diào)用update()更新之5、Spring多種ORM架提供了很好的支持,簡單描述在SpringHibernate事實現(xiàn)具體接口,從中獲得HibernateTemte進行具體操作。OpenSessionInViewOpenSessionInViewFilter或OpenSessionInViewInterceptor。(詳見Springframework2.0Reference12.2Hibernate)式事務需事務管理器,在context中設(shè)置指定屬性,用確定和。*SSHMVC架中,Struts于VC負責MVC(View:沿用JSP,HTTP,F(xiàn)orm,Tag,Resourse;Controller:ActionServlet,struts-config.xml,Action)Integersize=(Integer)s.createFilter(collection,"selectcount(*)"Integercount=(Integer)session.createQuery("selectcount(*) SessionFactoryisHibernatesconceptofasingledatastoreandisthreadsafesothatmanythreadscanaccessitconcurrentlyandrequestforsessionsandimmutablecacheofcompiledmapsforasingledatabase.ASessionFactoryisusuallyonlybuiltonceatstartup.SessionFactoryshouldbewrappedinsomekindofsingletonsothatitcanbeeasilyaccessedinanapplicationcode.SessionFactorysessionFactory=newConfiguration().configure().buildSessionfactory();SessionFactory是Hibrenate單例數(shù)據(jù)和線程安全的,以至于可以多線程同時。一個SessionFactory在啟動的時候只能建立一次。SessionFactory種單例以至于它能很簡單的在一個應用代碼中.Theconfigurationfileshibernate.cfg.xml(orperties)andmap*.hbm.xmlareusedbytheConfigurationclasstocreate(i.e.configureandbootstraphibernate)theSessionFactory,whichinturncreatestheSessioninstances.Sessioninstancesaretheprimaryinterfaceforthepersistenceservice.”hibernate.cfg.xml(alternativelycanuseperties):Thesetwofilesareusedtoconfigurethehibernatesevice(connectiondriverclass,connectionURL,connectionusername,connectionpassword,dialectetc).Ifbothfilesarepresentintheclasspaththenhibernate.cfg.xmlfileoverridesthesettingsfoundinthepertiesfile.”Mapfiles(*.hbm.xml):Thesefilesareusedtomappersistentobjectstoarelationaldatabase.Itisthebestpracticetostoreeachobjectinanindividualmapfile(i.emapfileperclass)becausestoringlargenumberofpersistentclassesintoonemapfilecanbedifficulttomanageandmaintain.Thenamingconventionistousethesamenameasthepersistent(POJO)classname.ForexampleAccount.classwillhaveamapfilenamedAccount.hbm.xml.Alternativelyhibernateannotationscanbeusedaspartofyourpersistentclasscodeinsteadofthe*.hbm.xmlfiles.1、針對oracle數(shù)據(jù)庫而言,F(xiàn)etchSize是設(shè)定JDBC的Statement數(shù)據(jù)的時候每次從數(shù)據(jù)庫中取出 。Oracle數(shù)據(jù)庫的JDBC驅(qū)動默認的FetchSize=15,設(shè)置FetchSize設(shè)置為:30、50,性能會有明顯提升,如果繼續(xù)增大,超出100,性能提升不明顯,反而會消耗內(nèi)存。<property<prop<prop<!–Create/updatethedatabasetablesautomaticallywhentheJVMstarts<propkey=”hibernate.hbm2ddl.auto”>update</prop><!–Turnbatchingoffforbettererrormessagesunder<propkey=”hibernate.jdbc.batch_size”>100</prop><prop時使用in4、對大數(shù)據(jù)量查詢時,慎用list()或者itor()返回查詢結(jié)果(2).而使用itor()返回結(jié)果時,在每次調(diào)用itor.next()返回對象并使用對象時,Hibernate但是含有較大量相同的數(shù)據(jù),或者結(jié)果集不是全部都會使用時,使用itor()才有優(yōu)勢。請注意對POupdate7、對于大數(shù)據(jù)量新增、修改、刪除操作或者是對大數(shù)據(jù)量的查詢,與數(shù)據(jù)庫的交互次數(shù)是決定處理時間據(jù)庫的操作減少到100—-150好。大體上,對于HIBERNATE?數(shù)據(jù)庫設(shè)計調(diào)整?HQL?API?主配置參數(shù)(日志,查詢緩存,fetch_size,batch_size)?(ID延遲加載,關(guān)聯(lián)優(yōu)化)?一級緩存的管理??事務控制策略。1、2、HQLHQLHIBERNATE機制的關(guān)聯(lián),HQL普通的SQL以3、用緩存數(shù)據(jù)。但是,查詢緩存在一個系統(tǒng)(數(shù)據(jù)變更頻繁,查詢條件相同的機率并不大)中可能會起反4、緩SESSION在一個HIBERNATESESSION大多于HIBERNATE方式進行,很可能會發(fā)現(xiàn)OutofMemeroy緩存:Session.evict及數(shù)據(jù)不會頻繁更新(否則使用CACHE其反緩存有幾種形式,可以在映射文件中配置:read-only(只讀,適用于很少變更的靜態(tài)數(shù)據(jù)/歷史數(shù)據(jù)),分布式緩存:同c)的配置一樣,只是緩存產(chǎn)品的選用不同,在目前的HIBERNATEoscache,jbosscache,目前的大多數(shù)項目,對它們的用于集群的使用(特別是關(guān)鍵系統(tǒng))都持保守態(tài)5、加集合延遲加載:通過實現(xiàn)自有的SET/LIST,HIBERNATE6、選完成同樣一件事,HIBERNATE如果用基于游標(ScrollableResults)或Itor題。Querylist/itor,如果去仔細研究一下它們,你可能會發(fā)現(xiàn)很多有意思的情況,二者主要區(qū)別(如果使用了Spring,在HibernateTemte中對應find,itor方法):itor則可以利用二級緩存對于一條查詢語句它會先從數(shù)據(jù)庫中找出所有符合條件的記錄的ID,沒有任何符合條件的記錄,使用itor會產(chǎn)生N+1條SQL語句(N為符合條件的記錄數(shù))通過itor,配合緩存管理API,在海量數(shù)據(jù)查詢中可以很好的解決內(nèi)存問題,如:YouObjectobject=(YouObject)it.next();sessionFactory.evice(YouObject.class,youObject.getId());}如果用list能就出OutofMemory7、HIBERNATE3.119.5.UnderstandingCollectionperformance8、控事務級別:參見標準的SQL事務級9、操JDBC,在進行大批數(shù)據(jù)更新時,BATCH不使BATCH通過設(shè)置batch_size作。舉個例子,要批量刪除某表中的對象,如“deleteAccount”,打出來的語句,會發(fā)現(xiàn)HIBERNATE了所有ACCOUNT的ID,再進行刪除,這主要是為了二級緩存,這樣效率肯定高不了,在后續(xù)的版本中增加了bulkdelete/update,但這也無法解決緩存的問題。也就是說,由于有了二級緩存的問題,HIBERNATE還有一點要注意應用層的緩存只是錦上添花它當救命稻草應用的根基(數(shù)據(jù)庫設(shè)計算法,高效的操作語句,恰當API擇等)才是最重要的。*JDBC,hibernateHibernate頁Queryquery=session.createQuery(”fromStudent”);Collectionstu

溫馨提示

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

評論

0/150

提交評論