Struts-Spring-Hibernate面試題總結(jié)文檔_第1頁
Struts-Spring-Hibernate面試題總結(jié)文檔_第2頁
Struts-Spring-Hibernate面試題總結(jié)文檔_第3頁
Struts-Spring-Hibernate面試題總結(jié)文檔_第4頁
Struts-Spring-Hibernate面試題總結(jié)文檔_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

一、Servlet生命周期與工作原理Servlet生命周期分為三個階段:初始化階段

調(diào)用init()方法響應(yīng)客戶請求階段調(diào)用service()方法終止階段調(diào)用destroy()方法Servlet初始化階段:在下列時刻Servlet容器裝載Servlet:1,Servlet容器啟動時自動裝載某些Servlet,實(shí)現(xiàn)它只需要在web.XML文件中的<Servlet></Servlet>之間添加如下代碼:<loadon-startup>1</loadon-startup>2,在Servlet容器啟動后,客戶首次向Servlet發(fā)送請求3,Servlet類文件被更新后,重新裝載ServletServlet被裝載后,Servlet容器創(chuàng)建一個Servlet實(shí)例并且調(diào)用Servlet的init()方法進(jìn)行初始化。在Servlet的整個生命周期內(nèi),init()方法只被調(diào)用一次。Servlet工作原理:首先簡單解釋一下Servlet接收和響應(yīng)客戶請求的過程,首先客戶發(fā)送一個請求,Servlet是調(diào)用service()方法對請求進(jìn)行響應(yīng)的,通過源代碼可見,service()方法中對請求的方式進(jìn)行了匹配,選擇調(diào)用doGet,doPost等這些方法,然后再進(jìn)入對應(yīng)的方法中調(diào)用邏輯層的方法,實(shí)現(xiàn)對客戶的響應(yīng)。在Servlet接口和GenericServlet中是沒有doGet,doPost等等這些方法的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個Servlet的時候,都必須實(shí)現(xiàn)doGet或doPost等這些方法。每一個自定義的Servlet都必須實(shí)現(xiàn)Servlet的接口,Servlet接口中定義了五個方法,其中比較重要的三個方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。GenericServlet是一個通用的,不特定于任何協(xié)議的Servlet,它實(shí)現(xiàn)了Servlet接口。而HttpServlet繼承于GenericServlet,因此HttpServlet也實(shí)現(xiàn)了Servlet接口。所以我們定義Servlet的時候只需要繼承HttpServlet即可。Servlet接口和GenericServlet是不特定于任何協(xié)議的,而HttpServlet是特定于HTTP協(xié)議的類,所以HttpServlet中實(shí)現(xiàn)了service()方法,并將請求ServletRequest,ServletResponse強(qiáng)轉(zhuǎn)為HttpRequest和HttpResponse。publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException{HttpRequestrequest;HttpResponseresponse;try{req=(HttpRequest)request;res=(HttpResponse)response;}catch(ClassCastExceptione){thrownewServletException("non-HTTPrequestresponse");}service(request,response);}

代碼的最后調(diào)用了HTTPServlet自己的service(request,response)方法,然后根據(jù)請求去調(diào)用對應(yīng)的doXXX方法,因?yàn)镠ttpServlet中的doXXX方法都是返回錯誤信息,protectedvoiddoGet(HttpServletRequestres,HttpServletResponseresp)throwsServletException,IOException{Stringprotocol=req.getProtocol();Stringmsg=IStrings.getString("http.method_get_not_supported");if(protocol.equals("1.1")){resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg);}esle{resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg);}}所以需要我們在自定義的Servlet中override這些方法!源碼面前,了無秘密!---------------------------------------------------------------------------------------------------------------------------------Servlet響應(yīng)請求階段:對于用戶到達(dá)Servlet的請求,Servlet容器會創(chuàng)建特定于這個請求的ServletRequest對象和ServletResponse對象,然后調(diào)用Servlet的service方法。service方法從ServletRequest對象獲得客戶請求信息,處理該請求,并通過ServletResponse對象向客戶返回響應(yīng)信息。對于Tomcat來說,它會將傳遞過來的參數(shù)放在一個Hashtable中,該Hashtable的定義是:privateHashtable<StringString[]>paramHashStringArray=newHashtable<StringString[]>();這是一個String-->String[]的鍵值映射。HashMap線程不安全的,Hashtable線程安全。-----------------------------------------------------------------------------------------------------------------------------------Servlet終止階段:當(dāng)WEB應(yīng)用被終止,或Servlet容器終止運(yùn)行,或Servlet容器重新裝載Servlet新實(shí)例時,Servlet容器會先調(diào)用Servlet的destroy()方法,在destroy()方法中可以釋放掉Servlet所占用的資源。-----------------------------------------------------------------------------------------------------------------------------------Servlet何時被創(chuàng)建:1,默認(rèn)情況下,當(dāng)WEB客戶第一次請求訪問某個Servlet的時候,WEB容器將創(chuàng)建這個Servlet的實(shí)例。2,當(dāng)web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素時,Servlet容器在啟動web服務(wù)器時,將按照順序創(chuàng)建并初始化Servlet對象。注意:在web.xml文件中,某些Servlet只有<serlvet>元素,沒有<servlet-mapping>元素,這樣我們無法通過url的方式訪問這些Servlet,這種Servlet通常會在<servlet>元素中配置一個<load-on-startup>子元素,讓容器在啟動的時候自動加載這些Servlet并調(diào)用init()方法,完成一些全局性的初始化工作。Web應(yīng)用何時被啟動:1,當(dāng)Servlet容器啟動的時候,所有的Web應(yīng)用都會被啟動2,控制器啟動web應(yīng)用-----------------------------------------------------------------------------------------------------------------------------------------------Servlet與JSP的比較:有許多相似之處,都可以生成動態(tài)網(wǎng)頁。JSP的優(yōu)點(diǎn)是擅長于網(wǎng)頁制作,生成動態(tài)頁面比較直觀,缺點(diǎn)是不容易跟蹤與排錯。Servlet是純Java語言,擅長于處理流程和業(yè)務(wù)邏輯,缺點(diǎn)是生成動態(tài)網(wǎng)頁不直觀。二、Hibernate1、Hibernate工作原理及為什么要用?原理:

1.

讀取并解析配置文件

2.

讀取并解析映射信息,創(chuàng)建SessionFactory

3.

打開Sesssion

4.

創(chuàng)建事務(wù)Transation

5.

持久化操作

6.

提交事務(wù)

7.

關(guān)閉Session

8.

關(guān)閉SesstionFactory

為什么要用:

a.

對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼。

b.Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實(shí)現(xiàn)。他很大程度的簡化DAO層的編碼工作

c.hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性。

d.hibernate的性能非常好,因?yàn)樗莻€輕量級框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系。2、Hibernate是如何延遲加載?a.Hibernate2延遲加載實(shí)現(xiàn):a)實(shí)體對象b)集合(Collection)

b.Hibernate3提供了屬性的延遲加載功能

當(dāng)Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在與內(nèi)存中,當(dāng)程序真正對數(shù)據(jù)的操作時,對象才存在與內(nèi)存中,就實(shí)現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)器的性能。Hibernate中的update()和saveOrUpdate()的區(qū)別,session的load()和get()的區(qū)別。

saveOrUpdate()方法可以實(shí)現(xiàn)update()的功能,但會多些步驟,具體如下:

如果對象在該session中已經(jīng)被持久化,不進(jìn)行操作;

對象的標(biāo)識符屬性(identifierproperty)在數(shù)據(jù)庫中不存在或者是個暫時的值,調(diào)用save()方法保存它;

如果session中的另一個對象有相同的標(biāo)識符拋出一個異常;

以上皆不符合則調(diào)用update()更新之。

Session.load/get方法均可以根據(jù)指定的實(shí)體類和id從數(shù)據(jù)庫讀取記錄,并返回與之對應(yīng)的實(shí)體對象。其區(qū)別在于:

如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方法會拋出一個ObjectNotFoundException;

load方法可返回實(shí)體的代理類實(shí)例,而get方法永遠(yuǎn)直接返回實(shí)體類;

load方法可以充分利用內(nèi)部緩存和二級緩存中的現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進(jìn)行數(shù)據(jù)查找,如沒有發(fā)現(xiàn)對應(yīng)數(shù)據(jù),將越過二級緩存,直接調(diào)用SQL完成數(shù)據(jù)讀取。

在hibernate中進(jìn)行多表查詢,每個表中各取幾個字段,也就是說查詢出來的結(jié)果集并沒有一個實(shí)體類與之對應(yīng),如何解決這個問題?

解決方案一,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean

解決方案二,對每個表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1filed1,type2field2),然后在hql里面就可以直接生成這個bean了。具體怎么用請看相關(guān)文檔,我說的不是很清楚。3.Hibernate中怎樣實(shí)現(xiàn)類之間的關(guān)系?(如:一對多、多對多的關(guān)系)類與類之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都市對對象進(jìn)行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-one、one-to-many、many-to-many、4.說下Hibernate的緩存機(jī)制1.

內(nèi)部緩存存在Hibernate中又叫一級緩存,屬于應(yīng)用事物級緩存

2.

二級緩存:

a)

應(yīng)用及緩存

b)

分布式緩存

條件:數(shù)據(jù)不會被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、非

關(guān)鍵數(shù)據(jù)

c)第三方緩存的實(shí)現(xiàn)5.

Hibernate的查詢方式Sql、Criteria,objectcomptosition

Hql:

1、屬性查詢

2、參數(shù)查詢、命名參數(shù)查詢

3、關(guān)聯(lián)查詢

4、分頁查詢

5、統(tǒng)計(jì)函數(shù)6.

如何優(yōu)化Hibernate?1.

使用雙向一對多關(guān)聯(lián),不使用單向一對多

2.

靈活使用單向一對多關(guān)聯(lián)

3.

不用一對一,用多對一取代

4.

配置對象緩存,不使用集合緩存

5.

一對多集合使用Bag,多對多集合使用Set

6.

繼承類使用顯式多態(tài)

7.

表字段要少,表關(guān)聯(lián)不要怕多,有二級緩存撐腰

三、Struts1.Struts工作機(jī)制?為什么要用?工作機(jī)制:

Struts的工作流程:

在web應(yīng)用啟動時就會加載初始化ActionServlet,ActionServlet從

struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象

當(dāng)ActionServlet接收到一個客戶請求時,將執(zhí)行如下流程.

-(1)檢索和用戶請求匹配的ActionMapping實(shí)例,如果不存在,就返回請求路徑無效信息;

-(2)如果ActionForm實(shí)例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)據(jù)保存到ActionForm

對象中;

-(3)根據(jù)配置信息決定是否需要表單驗(yàn)證.如果需要驗(yàn)證,就調(diào)用ActionForm的validate()方法;

-(4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象,

就表示表單驗(yàn)證成功;

-(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請求轉(zhuǎn)發(fā)給哪個Action,如果相應(yīng)的

Action實(shí)例不存在,就先創(chuàng)建這個實(shí)例,然后調(diào)用Action的execute()方法;

-(6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉(zhuǎn)發(fā)給

ActionForward對象指向的JSP組件;

-(7)ActionForward對象指向JSP組件生成動態(tài)網(wǎng)頁,返回給客戶;

為什么要用:

JSP、Servlet、JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強(qiáng)大的企業(yè)應(yīng)用系統(tǒng)提供了可能。但用這些技術(shù)構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個規(guī)則、一個把這些技術(shù)組織起來的規(guī)則,這就是框架,Struts便應(yīng)運(yùn)而生。

基于Struts開發(fā)的應(yīng)用由3類組件構(gòu)成:控制器組件、模型組件、視圖組件2.Struts的validate框架是如何驗(yàn)證的?在struts配置文件中配置具體的錯誤提示,再在FormBean中的validate()方法具體調(diào)用。3.

說下Struts的設(shè)計(jì)模式MVC模式:web應(yīng)用程序啟動時就會加載并初始化ActionServler。用戶提交表單時,一個配置好的ActionForm對象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文件配置好的設(shè)置決定是否需要表單驗(yàn)證,如果需要就調(diào)用ActionForm的Validate()驗(yàn)證后選擇將請求發(fā)送到哪個Action,如果Action不存在,ActionServlet會先創(chuàng)建這個對象,然后調(diào)用Action的execute()方法。Execute()從ActionForm對象中獲取數(shù)據(jù),完成業(yè)務(wù)邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態(tài)的網(wǎng)頁,返回給客戶。

單例模式

Factory(工廠模式):

定義一個基類===》實(shí)現(xiàn)基類方法(子類通過不同的方法)===》定義一個工廠類(生成子類實(shí)例)

===》開發(fā)人員調(diào)用基類方法

Proxy(代理模式)三、spring1、Spring特點(diǎn)Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架?!糨p量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對象不依賴于Spring的特定類。◆控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進(jìn)來,而不是這個對象自己創(chuàng)建或者查找依賴對象。你可以認(rèn)為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。

◆面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(jì)(auditing)和事務(wù)()管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點(diǎn),例如日志或事務(wù)支持。

◆容器——Spring包含并管理應(yīng)用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創(chuàng)建——基于一個可配置原型(prototype),你的bean可以創(chuàng)建一個單獨(dú)的實(shí)例或者每次需要時都生成一個新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。

◆框架——Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。使用Spring有什么好處?◆Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會發(fā)現(xiàn)Spring關(guān)注了遺留下的問題,?!鬝pring能消除在許多工程上對Singleton的過多使用。根據(jù)我的經(jīng)驗(yàn),這是一個主要的問題,它減少了系統(tǒng)的可測試性和面向?qū)ο筇匦浴?/p>

◆Spring能消除使用各種各樣格式的屬性定制文件的需要,在整個應(yīng)用和工程中,可通過一種一致的方法來進(jìn)行配置。曾經(jīng)感到迷惑,一個特定類要查找迷幻般的屬性關(guān)鍵字或系統(tǒng)屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化。

◆Spring能通過接口而不是類促進(jìn)好的編程習(xí)慣,減少編程代價到幾乎為零。

◆Spring被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于他的APIs。在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對象沒有依賴于Spring。

◆使用Spring構(gòu)建的應(yīng)用程序易于單元測試。

◆Spring能使EJB的使用成為一個實(shí)現(xiàn)選擇,而不是應(yīng)用架構(gòu)的必然選擇。你能選擇用POJOs或localEJBs來實(shí)現(xiàn)業(yè)務(wù)接口,卻不會影響調(diào)用代碼。

◆Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適于許多web應(yīng)用。例如,Spring能使用AOP提供聲明性事務(wù)而不通過使用EJB容器,如果你僅僅需要與單個的數(shù)據(jù)庫打交道,甚至不需要JTA實(shí)現(xiàn)。

■Spring為數(shù)據(jù)存取提供了一致的框架,不論是使用JDBC或O/Rmapping產(chǎn)品(如Hibernate)。

Spring確實(shí)使你能通過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。

總結(jié)起來,Spring有如下優(yōu)點(diǎn):

◆低侵入式設(shè)計(jì),代碼污染極低

◆獨(dú)立于各種應(yīng)用服務(wù)器,可以真正實(shí)現(xiàn)WriteOnce,RunAnywhere的承諾

◆Spring的DI機(jī)制降低了業(yè)務(wù)對象替換的復(fù)雜性

◆Spring并不完全依賴于Spring,開發(fā)者可自由選用Spring框架的部分或全部Spring提倡面向接口編程,請講一下你對它的理解,它有什么好處。在一個面向?qū)ο蟮南到y(tǒng)中,系統(tǒng)的各種功能是由許許多多的不同對象協(xié)作完成的。在這種情況下,各個對象內(nèi)部是如何實(shí)現(xiàn)自己的對系統(tǒng)設(shè)計(jì)人員來講就不那么重要了;而各個對象之間的協(xié)作關(guān)系則成為系統(tǒng)設(shè)計(jì)的關(guān)鍵。小到不同類之間的通信,大到各模塊之間的交互,在系統(tǒng)設(shè)計(jì)之初都是要著重考慮的,這也是系統(tǒng)設(shè)計(jì)的主要工作內(nèi)容2、spring工作機(jī)制和使用springmvc請所有的請求都提交給DispatcherServlet,它會委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)負(fù)責(zé)對請求進(jìn)行真正的處理工作。

2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.

3.DispatcherServlet請請求提交到目標(biāo)Controller

4.Controller進(jìn)行業(yè)務(wù)邏輯處理后,會返回一個ModelAndView

5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象

6.視圖對象負(fù)責(zé)渲染返回給客戶端。為什么用:AOP讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點(diǎn),稱為橫切關(guān)注點(diǎn),并將它們插入到應(yīng)用程序代碼中。使用AOP后,公共服務(wù)

(比如日志、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊?,同時不會增加域?qū)ο蟮膶ο竽P偷膹?fù)雜性。IOC允許創(chuàng)建一個可以構(gòu)造對象的應(yīng)用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。正如單詞倒置所表明的,IOC就像反

過來的JNDI。沒有使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straightconstruction),每一個對象都是用

其協(xié)作對象構(gòu)造的。因此是由容器管理協(xié)作對象(collaborator)。

Spring即使一個AOP框架,也是一IOC容器。Spring最好的地方是它有助于您替換對象。有了Spring,只要用JavaBean屬性和配置文件加入依賴性(協(xié)作對象)。然后可以很容易地在需要時替換具有類似接口的協(xié)作對象。}

Spring對多種ORM框架提供了很好的支持,簡單描述在Spring中使用Hibernate的方法,并結(jié)合事務(wù)管理。

在context中定義DataSource,創(chuàng)建SessionFactoy,設(shè)置參數(shù);DAO類繼承HibernateDaoSupport,實(shí)現(xiàn)具體接口,從中獲得HibernateTemplate進(jìn)行具體操作。在使用中如果遇到OpenSessionInView的問題,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。3、Spring的BeanBean有哪些作用域。singleton、prototype、request、session、globalsession、自定義

除application(詳見SpringFramework2.0Reference的3.4節(jié)singleton=”false”/>7、

Hibernate中的update()和saveOrUpdate()的區(qū)別saveOrUpdate()方法可以實(shí)現(xiàn)update()的功能,但會多些步驟,具體如下:

如果對象在該session中已經(jīng)被持久化,不進(jìn)行操作;

對象的標(biāo)識符屬性(identifierproperty)在數(shù)據(jù)庫中不存在或者是個暫時的值,調(diào)用save()方法保存它;

如果session中的另一個對象有相同的標(biāo)識符拋出一個異常;

以上皆不符合則調(diào)用update()更新之。Session.load/get方法均可以根據(jù)指定的實(shí)體類和id從數(shù)據(jù)庫讀取記錄,并返回與之對應(yīng)的實(shí)體對象。其區(qū)別在于:

如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方法會拋出一個ObjectNotFoundException;

load方法可返回實(shí)體的代理類實(shí)例,而get方法永遠(yuǎn)直接返回實(shí)體類;

load方法可以充分利用內(nèi)部緩存和二級緩存中的現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進(jìn)行數(shù)據(jù)查找,如沒有發(fā)現(xiàn)對應(yīng)數(shù)據(jù),將越過二級緩存,直接調(diào)用SQL完成數(shù)據(jù)讀取。8、

Spring中使用Hibernate的方法,并結(jié)合事務(wù)管理

在context中定義DataSource,創(chuàng)建SessionFactoy,設(shè)置參數(shù);DAO類繼承HibernateDaoSupport,實(shí)現(xiàn)具體接口,從中獲得HibernateTemplate進(jìn)行具體操作。在使用中如果遇到OpenSessionInView的問題,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。(詳見SpringFramework2.0Reference的12.2節(jié)class=""singleton="false"/>16.Spring設(shè)值注入簡單實(shí)例(spring簡單應(yīng)用:面向接口編程)1.

首先新建2個接口,Person(人),Axe(斧頭)接口。Person接口:packagespringtest;//定義Person接口publicinterfacePerson{

//Person接口里定義一個使用斧頭的方法

publicvoiduseAxe();}Axe接口:packagespringtest;//定義Axe接口publicinterfaceAxe{

//Axe接口有個砍柴的方法

publicStringchop();}2.

新建2個實(shí)現(xiàn)類,Chinese類,StoneAxe類。Chinese類:packagespringtest;//Chinese實(shí)現(xiàn)Person接口publicclassChineseimplementsPerson{

//面向Axe接口編程,而不是具體的實(shí)現(xiàn)累

privateAxeaxe;

//默認(rèn)的構(gòu)造器

publicChinese(){}

publicvoidsetAxe(Axeaxe){

this.axe=axe;

}

//實(shí)現(xiàn)Person接口的useAxe方法

publicvoiduseAx

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論