軟件工程設(shè)計(jì)模式基礎(chǔ)_第1頁
軟件工程設(shè)計(jì)模式基礎(chǔ)_第2頁
軟件工程設(shè)計(jì)模式基礎(chǔ)_第3頁
軟件工程設(shè)計(jì)模式基礎(chǔ)_第4頁
軟件工程設(shè)計(jì)模式基礎(chǔ)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、軟件工程與設(shè)計(jì)模式1、 UML 方面標(biāo)準(zhǔn)建模語言UML 。用例圖,靜態(tài)圖(包括類圖、對(duì)象圖和包圖),行為圖,交互圖 (順序圖,合作圖),實(shí)現(xiàn)圖。2、 軟件開發(fā)的3、j2ee常用的設(shè)計(jì)模式?說明工廠模式??偣?23 種,分為三大類:創(chuàng)建型,結(jié)構(gòu)型,行為型我只記得其中常用的6、 7 種,分別是:創(chuàng)建型(工廠、工廠方法、抽象工廠、單例)結(jié)構(gòu)型(包裝、適配器,組合,代理)行為(觀察者,模版,策略)然后再針對(duì)你熟悉的模式談?wù)勀愕睦斫饧纯?。Java中的23種設(shè)計(jì)模式:Factory (工廠模式), Builder (建造模式), Factory Method (工廠方法模式),Prototype (原始模

2、型模式),Singleton (單例模式),Facade (門面模式),Adapter (適配器模式),式),Decorator (裝飾模式),Command (命令模式),式),Iterator (迭代子模式),式),Observer (觀察者模式),Bridge (橋梁模式),F(xiàn)lyweight (享元模式),Interpreter (解釋器模式),Mediator (調(diào)停者模式),State (狀態(tài)模式),Composite (合成模Proxy (代理模式),Visitor (訪問者模Memento (備忘錄模Strategy (策略模式),Template Method (模板方法模式

3、), Chain Of Responsibleity (責(zé)任鏈模式)工廠模式:工廠模式是一種經(jīng)常被使用到的模式,根據(jù)工廠模式實(shí)現(xiàn)的類可 以根據(jù)提供的數(shù)據(jù)生成一組類中某一個(gè)類的實(shí)例,通常這一組類有一個(gè)公共的 抽象父類并且實(shí)現(xiàn)了相同的方法,但是這些方法針對(duì)不同的數(shù)據(jù)進(jìn)行了不同的 操作。首先需要定義一個(gè)基類,該類的子類通過不同的方法實(shí)現(xiàn)了基類中的方 法。然后需要定義一個(gè)工廠類,工廠類可以根據(jù)條件生成不同的子類實(shí)例。當(dāng) 得到子類的實(shí)例后,開發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是 哪一個(gè)子類的實(shí)例。4、開發(fā)中都用到了那些設(shè)計(jì)模式?用在什么場(chǎng)合?每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問題,

4、然后描述了該問題的解決方案的核心。通過這種方式,你可以無數(shù)次地使用那些已有的解決方案,無需在重復(fù)相同的工作。主要用到了MVC 的設(shè)計(jì)模式。用來開發(fā)JSP/Servlet或者J2EE的相關(guān)應(yīng)用。簡(jiǎn)單工廠模式等。流行的框架與新技術(shù)1、談?wù)勀銓?duì)Struts 的理解。答:1. struts是一個(gè)按MVC模式設(shè)計(jì)的Web層框架,其實(shí)它就是一個(gè)大大的 servlet,這個(gè) Servlet名為 ActionServlet,或是 ActionServlet 的子類。我們可以 在web.xml文件中將符合某種特征的所有請(qǐng)求交給這個(gè)Servlet處理,這個(gè)Servlet再參照一個(gè)配置文件(通常為/WEB-INF/

5、struts-config.xml )將各個(gè)請(qǐng)求 分別分配給不同的action 去處理。一個(gè)擴(kuò)展知識(shí)點(diǎn):struts的配置文件可以有多個(gè),可以按模塊配置各自的配 置文件,這樣可以防止配置文件的過度膨脹;2 . ActionServlet把請(qǐng)求交給action去處理之前,會(huì)將請(qǐng)求參數(shù)封裝成一個(gè) formbean對(duì)象(就是一個(gè)java類,這個(gè)類中的每個(gè)屬性對(duì)應(yīng)一個(gè)請(qǐng)求參數(shù)), 封裝成一個(gè)什么樣的formbean對(duì)象呢?看配置文件。3 .要說明的是, ActionServlet把formbean對(duì)象傳遞給action的execute方法 之前,可能會(huì)調(diào)用formbean的validate方法進(jìn)行校驗(yàn)

6、,只有校驗(yàn)通過后才將這 個(gè)formbean對(duì)象傳遞給action的execute方法,否則,它將返回一個(gè)錯(cuò)誤頁面, 這個(gè)錯(cuò)誤頁面由input 屬性指定,(看配置文件)作者為什么將這里命名為input屬性,而不是error屬性,我們后面結(jié)合實(shí)際的運(yùn)行效果進(jìn)行分析。4 .action執(zhí)行完后要返回顯示的結(jié)果視圖,這個(gè)結(jié)果視圖是用一個(gè)ActionForward 對(duì)象來表示的,actionforward 對(duì)象通過struts-config.xml 配置文件中的配置關(guān)聯(lián)到某個(gè)jsp 頁面,因?yàn)槌绦蛑惺褂玫氖窃趕truts-config.xml 配置文件為jsp頁面設(shè)置的邏輯名,這樣可以實(shí)現(xiàn)action程

7、序代碼與返回的jsp頁面名稱的解耦。你對(duì)struts可能還有自己的應(yīng)用方面的經(jīng)驗(yàn),那也要一并說出來2、談?wù)勀銓?duì) Hibernate的理解。答 :1. 面向?qū)ο笤O(shè)計(jì)的軟件內(nèi)部運(yùn)行過程可以理解成就是在不斷創(chuàng)建各種新對(duì) 象、建立對(duì)象之間的關(guān)系,調(diào)用對(duì)象的方法來改變各個(gè)對(duì)象的狀態(tài)和對(duì)象消亡的過程,不管程序運(yùn)行的過程和操作怎么樣,本質(zhì)上都是要得到一個(gè)結(jié)果,程序上一個(gè)時(shí)刻和下一個(gè)時(shí)刻的運(yùn)行結(jié)果的差異就表現(xiàn)在內(nèi)存中的對(duì)象狀態(tài)發(fā)生 了變化。2 .為了在關(guān)機(jī)和內(nèi)存空間不夠的狀況下,保持程序的運(yùn)行狀態(tài),需要將內(nèi)存中的對(duì)象狀態(tài)保存到持久化設(shè)備和從持久化設(shè)備中恢復(fù)出對(duì)象的狀態(tài),通常都是保存到關(guān)系數(shù)據(jù)庫來保存大量對(duì)象信

8、息。從Java程序的運(yùn)行功能上來講,保存對(duì)象狀態(tài)的功能相比系統(tǒng)運(yùn)行的其他功能來說,應(yīng)該是一個(gè)很不起眼的附屬功能, java 采用 jdbc 來實(shí)現(xiàn)這個(gè)功能,這個(gè)不起眼的功能卻要編寫大量的代碼,而做的事情僅僅是保存對(duì)象和恢復(fù)對(duì)象,并且那些大量的jdbc 代碼并沒有什么技術(shù)含量,基本上是采用一套例行公事的標(biāo)準(zhǔn)代碼模板來編寫,是一種苦活和重復(fù)性的工作。3 .通過數(shù)據(jù)庫保存java程序運(yùn)行時(shí)產(chǎn)生的對(duì)象和恢復(fù)對(duì)象,其實(shí)就是實(shí)現(xiàn)了 java對(duì)象與關(guān)系數(shù)據(jù)庫記錄的映射關(guān)系,稱為 ORM (即Object Relation Mapping),人們可以通過封裝JDBC代碼來實(shí)現(xiàn)了這種功能,封裝出來的產(chǎn)品 稱之為

9、ORM框架,Hibernate就是其中的一種流行 ORM框架。使用Hibernate 框架,不用寫JDBC代碼,僅僅是調(diào)用一個(gè)save方法,就可以將對(duì)象保存到關(guān) 系數(shù)據(jù)庫中,僅僅是調(diào)用一個(gè) get方法,就可以從數(shù)據(jù)庫中加載出一個(gè)對(duì)象。4 .使用Hibernate的基本流程是:配置 Configuration對(duì)象、產(chǎn)生 SessionFactory創(chuàng)建session對(duì)象,啟動(dòng)事務(wù),完成 CRUD操作,提交事務(wù), 關(guān)閉session。5 .使用Hibernate時(shí),先要配置hibernate.cfg.xml文件,其中配置數(shù)據(jù)庫連接 信息和方言等,還要為每個(gè)實(shí)體配置相應(yīng)的hbm.xml文件,hibe

10、rnate.cfg.xml文件中需要登記每個(gè)hbm.xml 文件。6 .在應(yīng)用Hibernate時(shí),重點(diǎn)要了解Session的緩存原理,級(jí)聯(lián),延遲加載和 hql 查詢。3、 AOP 的作用。4、你對(duì)Spring 的理解。1.Spring實(shí)現(xiàn)了工廠模式的工廠類(在這里有必要解釋清楚什么是工廠模 式),這個(gè)類名為BeanFactory (實(shí)際上是一個(gè)接口),在程序中通常 BeanFactory的子類ApplicationContext。Spring相當(dāng)于一個(gè)大的工廠類,在其配 置文件中通過bean元素配置用于創(chuàng)建實(shí)例對(duì)象的類名和實(shí)例對(duì)象的屬性。2. Spring提供了對(duì)IOC良好支持,IOC是一種

11、編程思想,是一種架構(gòu)藝術(shù), 利用這種思想可以很好地實(shí)現(xiàn)模塊之間的解耦。IOC也稱為DI (DepencyInjection ),什么叫依賴注入呢?譬如, Class ProgrammerComputer computer = null;public void code()/Computer computer = new IBMComputer();/Computer computer = beanfacotry.getComputer();computer.write();public void setComputer(Computer computer)puter = computer;另外

12、兩種方式都由依賴,第一個(gè)直接依賴于目標(biāo)類,第二個(gè)把依賴轉(zhuǎn)移到工廠上,第三個(gè)徹底與目標(biāo)和工廠解耦了。在spring 的配置文件中配置片段如下:<bean id= ” computer ” class= ” erview.Computer ”></bean><bean id= ” programmer” class= ” erview.Programmer ”><property name= ” computererf”= ” computer ” ></proyp>ert </b

13、ean>3. Spring提供了對(duì)AOP技術(shù)的良好封裝,AOP稱為面向切面編程,就是系統(tǒng)中有很多各不相干的類的方法,在這些眾多方法中要加入某種系統(tǒng)功能的代碼,例如,加入日志,加入權(quán)限判斷,加入異常處理,這種應(yīng)用稱為 AOPo實(shí)現(xiàn) AOP 功能采用的是代理技術(shù),客戶端程序不再調(diào)用目標(biāo),而調(diào)用代理類,代理類與目標(biāo)類對(duì)外具有相同的方法聲明,有兩種方式可以實(shí)現(xiàn)相同的方法聲明,一是實(shí)現(xiàn)相同的接口,二是作為目標(biāo)的子類在,JDK中采用Proxy類產(chǎn)生動(dòng)態(tài)代理的方式為某個(gè)接口生成實(shí)現(xiàn)類,如果要為某個(gè)類生成子類,則可以用CGLIBo在生成的代理類的方法中加入系統(tǒng)功能和調(diào)用目標(biāo)類的相應(yīng)方法,系統(tǒng)功能的代理以

14、Advice 對(duì)象進(jìn)行提供,顯然要?jiǎng)?chuàng)建出代理對(duì)象,至少需要目標(biāo)類和Advice類。spring提供了這種支持,只需要在spring配置文件中配置這兩個(gè)元 素即可實(shí)現(xiàn)代理和aop功能,例如,<bean id= ” proxy ” type=” org.spring.framework.aop.ProxyBeanFactory”><property name=” target ” ref= ” ></property>ref= ” ></property><property name= ” advisor </bean>5、談

15、談Struts 中的 Action servlet。6、 Struts 優(yōu)缺點(diǎn)優(yōu)點(diǎn):1. 實(shí)現(xiàn) MVC 模式,結(jié)構(gòu)清晰,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn)2. 有豐富的tag可以用,Struts的標(biāo)記庫(Taglib),如能靈活動(dòng)用,則能大大 提高開發(fā)效率3. 頁面導(dǎo)航使系統(tǒng)的脈絡(luò)更加清晰。通過一個(gè)配置文件,即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,這對(duì)于后期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個(gè)項(xiàng)目時(shí),這種優(yōu)勢(shì)體現(xiàn)得更加明顯。4. 提供 Exception 處理機(jī)制.5. 數(shù)據(jù)庫鏈接池管理6. 支持 I18N缺點(diǎn)轉(zhuǎn)到展示層時(shí),需要配置forward,如果有十個(gè)展示層的jsp,需要配置十 次st

16、ruts,而且還不包括有時(shí)候目錄、文件變更,需要重新修改 forward , 注意,每次修改配置之后,要求重新部署整個(gè)項(xiàng)目,而 tomcate這樣的服 務(wù)器,還必須重新啟動(dòng)服務(wù)器二、Struts的Action必需是thread safe方式,它僅僅允許一個(gè)實(shí)例去處理所有的請(qǐng)求。所以action 用到的所有的資源都必需統(tǒng)一同步,這個(gè)就引起了線程安全的問題。測(cè)試不方便.Struts的每個(gè)Action都同Web層耦合在一起,這樣它的測(cè)試依賴于Web容器,單元測(cè)試也很難實(shí)現(xiàn)。不過有一個(gè)Junit的擴(kuò)展工具Struts 丁6$心2$皿以實(shí)現(xiàn)它的單元測(cè)試。四、 類型的轉(zhuǎn)換.Struts的FormBean把

17、所有的數(shù)據(jù)都作為String類型,它可以 使用工具Commons-Beanutils進(jìn)行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在 Class級(jí)別, 而且轉(zhuǎn)化的類型是不可配置的。類型轉(zhuǎn)化時(shí)的錯(cuò)誤信息返回給用戶也是非常困難的。五、對(duì)Servlet的依賴性過強(qiáng).Struts處理Action時(shí)必需要依賴 ServletRequest和 ServletResponse 所有它才i脫不了 Servlet容器。六、前端表達(dá)式語言方面.Struts集成了 JSTL,所以它主要使用JSTL的表達(dá)式 語言來獲取數(shù)據(jù)??墒荍STL 的表達(dá)式語言在Collection 和索引屬性方面處理顯得很弱。7、 對(duì)Action執(zhí)行的控制困難

18、.Struts創(chuàng)建一個(gè)Action ,如果想控制它的執(zhí)行 順序?qū)?huì)非常困難。甚至你要重新去寫Servlet來實(shí)現(xiàn)你的這個(gè)功能需求,8、 對(duì)Action執(zhí)行前和后的處理.Struts處理Action的時(shí)候是基于class的 hierarchies,很又t在action處理前和后進(jìn)行操作。9、 對(duì)事件支持不夠.在struts中,實(shí)際是一個(gè)表單Form對(duì)應(yīng)一個(gè)Action類(或DispatchAction),換一句話說:在Struts中實(shí)際是一個(gè)表單只能對(duì)應(yīng)一 個(gè)事件,struts 這種事件方式稱為 application event, application event和 component ev

19、ent相比是一種粗粒度的事件7、 STRUTS 的應(yīng)用(如STRUTS 架構(gòu) )Struts是采用Java Servlet/JavaServer Pages術(shù),開發(fā) Web應(yīng)用程序的開放 源碼的 framework。采用 Struts能開發(fā)出基于 MVC(Model-View-Controller)設(shè)計(jì) 模式的應(yīng)用構(gòu)架。Struts有如下的主要功能:一.包含一個(gè)controller servlet,能 將用戶的請(qǐng)求發(fā)送到相應(yīng)的 Action對(duì)象。二.JSP自由tag庫,并且在controller servlet中提供關(guān)聯(lián)支持,幫助開發(fā)員創(chuàng)建交互式表單應(yīng)用。三.提供了一系列實(shí)用對(duì)象:XML處理、

20、通過Java reflection APIs自動(dòng)處理JavaBeansil性、國(guó)際 化的提示和消息。8、說說strutsl與struts2的區(qū)別1 .都是MVC 的 WEB 框架 ,2 struts1的老牌框架,應(yīng)用很廣泛,有很好的群眾基礎(chǔ),使用它開發(fā)風(fēng)險(xiǎn)很 小,成本更低! struts2雖然基于這個(gè)框架,但是應(yīng)用群眾并多,相對(duì)不成熟,未知的風(fēng)險(xiǎn)和變化很多,開發(fā)人員相對(duì)不好招,使用它開發(fā)項(xiàng)目的風(fēng)險(xiǎn)系數(shù)更大,用人成本更高!3 .struts2畢竟是站在前輩的基礎(chǔ)設(shè)計(jì)出來,它會(huì)改善和完善struts1中的一些缺陷,struts1中一些懸而未決問題在struts2得到了解決。4.struts1的前端

21、控制器是一個(gè) Servlet,名稱為ActionServlet, struts2的前端 控制器是一個(gè) filter,在 struts2.0中叫 FilterDispatcher,在 struts2.1 中叫 StrutsPrepareAndExecuteFilte r5.struts1的action需要繼承 Action類,struts2的action可以不繼承任何類; struts1對(duì)同一個(gè)路徑的所有請(qǐng)求共享一個(gè)Action實(shí)例,struts2對(duì)同一個(gè)路徑的每個(gè)請(qǐng)求分別使用一個(gè)獨(dú)立 Action實(shí)例對(duì)象,所有對(duì)于struts2的Action不用考 慮線程安全問題。6.在strutsl中使用f

22、ormbean封裝請(qǐng)求參數(shù),在 struts2中直接使用action的屬 性來封裝請(qǐng)求參數(shù)。7.struts1中的多個(gè)業(yè)務(wù)方法放在一個(gè) Action中時(shí)(即繼承 DispatchAction 時(shí)),要么都校驗(yàn),要么都不校驗(yàn);對(duì)于 struts2,可以指定只對(duì)某個(gè)方法進(jìn)行 校驗(yàn),當(dāng)一個(gè)Action 繼承了 ActionSupport 且在這個(gè)類中只編寫了validateXxx()方法,那么則只對(duì)Xxx() 方法進(jìn)行校驗(yàn)。(一個(gè)請(qǐng)求來了的執(zhí)行流程進(jìn)行分析,struts2是自動(dòng)支持分模塊開發(fā),并可以 不同模塊設(shè)置不同的url前綴,這是通過package的namespac媒實(shí)現(xiàn)的; struts2是支

23、持多種類型的視圖;struts2的視圖地址可以是動(dòng)態(tài)的,即視圖的 名稱是支持變量方式的,舉例,論壇發(fā)帖失敗后回來還要傳遞boardido視圖內(nèi)容顯示方面:它的標(biāo)簽用 ognl,要el強(qiáng)大很多,在國(guó)際化方面支持分 模塊管理,兩個(gè)模塊用到同樣的key,對(duì)應(yīng)不同的消息;)與Struts1不同,Struts2對(duì)用戶的每一次請(qǐng)求都會(huì)創(chuàng)建一個(gè) Action ,所以 Struts2中的Action是線程安全的。給我印象最深刻的是:struts配置文件中的redirect視圖的url不能接受參數(shù), 而struts2配置文件中的redirect視圖可以接受參數(shù)。9、hibernate 中的 update()和

24、saveOrUpdate()的區(qū)另session勺load()和get()的區(qū)另10、簡(jiǎn)述Hibernate 和 JDBC 的優(yōu)缺點(diǎn)?如何書寫一個(gè)oneto many 配置文件.11、 iBatis 與 Hibernate 有什么不同相同點(diǎn):屏蔽jdbc api 的底層訪問細(xì)節(jié),使用我們不用與jdbc api 打交道,就可以訪問數(shù)據(jù)。jdbc api編程流程固定,還將sql語句與java代碼混雜在了一起,經(jīng)常需要拼湊 sql 語句,細(xì)節(jié)很繁瑣。ibatis的好處:屏蔽jdbc api的底層訪問細(xì)節(jié);將sql語句與java代碼進(jìn)行分離; 提供了將結(jié)果集自動(dòng)封裝稱為實(shí)體對(duì)象和對(duì)象的集合的功能,qu

25、eryForList返回對(duì)象集合,用queryForObject返回單個(gè)對(duì)象;提供了自動(dòng)將實(shí)體對(duì)象的屬性傳 遞給 sql 語句的參數(shù)。Hibernate是一個(gè)全自動(dòng)的orm映射工具,它可以自動(dòng)生成 sql語句,ibatis需要我 們自己在xml配置文件中寫sql語句,hibernate要比ibatis功能負(fù)責(zé)和強(qiáng)大很多。 因?yàn)閔ibernate自動(dòng)生成sql語句,我們無法控制該語句,我們就無法去寫特定 的高效率的sqL對(duì)于一些不太復(fù)雜的sql查詢,hibernate可以很好幫我們完成, 但是,對(duì)于特別復(fù)雜的查詢,hibernate就很難適應(yīng)了,這時(shí)候用ibatis就是不錯(cuò) 的選擇,因?yàn)閕bat

26、is 還是由我們自己寫sql 語句。12、寫Hibernate 的一對(duì)多和多對(duì)一雙向關(guān)聯(lián)的orm 配置 ?13、hibernate 的 inverse屬性的作用?解決方案一,按照Object口數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean解決方案二,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2field2),然后在hql里面就可以直接生成這個(gè)bean了。14、在DAO 中如何體現(xiàn)DAO 設(shè)計(jì)模式?解決方案一,按照Object口數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean解決方案二,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),比

27、如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2field2),然后在hql里面就可以直接生成這個(gè)bean了。15、 spring+Hibernate 中委托方案怎么配置?解決方案一,按照Object口數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean解決方案二,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2field2),然后在hql里面就可以直接生成這個(gè)bean了。16、 spring+Hibernate 中委托方案怎么配置?解決方案一,

28、按照Object口數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean解決方案二,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2field2),然后在hql里面就可以直接生成這個(gè)bean了。17、 hibernate 進(jìn)行多表查詢每個(gè)表中各取幾個(gè)字段,也就是說查詢出來的結(jié)果集沒有一個(gè)實(shí)體類與之對(duì)應(yīng)如何解決;解決方案一,按照Object口數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean解決方案二,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 file

29、d1,type2field2),然后在hql里面就可以直接生成這個(gè)bean了18、 介紹一下Hibernate 的二級(jí)緩存按照以下思路來回答:(1)首先說清楚什么是緩存,(2)再說有了hibernate的Session就是一級(jí)緩存,即有了一級(jí)緩存,為什么還要有二級(jí)緩存, (3)最后再說如何配置Hibernate的二級(jí)緩存。( 1)緩存就是把以前從數(shù)據(jù)庫中查詢出來和使用過的對(duì)象保存在內(nèi)存中(一個(gè)數(shù)據(jù)結(jié)構(gòu)中),這個(gè)數(shù)據(jù)結(jié)構(gòu)通常是或類似 Hashmap當(dāng)以后要使用某個(gè)對(duì)象 時(shí),先查詢緩存中是否有這個(gè)對(duì)象,如果有則使用緩存中的對(duì)象,如果沒有則去查詢數(shù)據(jù)庫,并將查詢出來的對(duì)象保存在緩存中,以便下次使用。

30、下面是緩存的偽代碼:引出hibernate的第二級(jí)緩存,用下面的偽代碼分析了Cache的實(shí)現(xiàn)原理Daohashmap map = new map();User getUser(integer id)User user = map.get(id)if(user = null)user = session.get(id);map.put(id,user);return user;DaoCache cache = nullsetCache(Cache cache)this.cache = cacheUser getUser(int id)if(cache!=null)User user = cach

31、e.get(id);if(user =null)user = session.get(id);cache.put(id,user);return user; return session.get(id); (2) Hibernate的Session就是一種緩存,我們通常將之稱為 Hibernate的一級(jí)緩 存,當(dāng)想使用session從數(shù)據(jù)庫中查詢出一個(gè)對(duì)象時(shí),Sessio也是先從自己內(nèi)部 查看是否存在這個(gè)對(duì)象,存在則直接返回,不存在才去訪問數(shù)據(jù)庫,并將查詢的結(jié)果保存在自己內(nèi)部。由于 Session代表一次會(huì)話過程,一個(gè) Session與一個(gè) 數(shù)據(jù)庫連接相關(guān)連,所以Session最好不要長(zhǎng)時(shí)間保持打

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論