




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、JavaSSH(MVC)談?wù)勀銓VC的理解 MVC是ModelViewControler的簡稱。即模型視圖控制器。MVC是一種設(shè)計模式,它強制性的把應(yīng)用程序的輸入、處理和輸出分開。 MVC中的模型、視圖、控制器分別擔(dān)負(fù)著不同的任務(wù)。 視圖: 視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關(guān)的數(shù)據(jù),并接受用戶的輸入。視圖不進行任何業(yè)務(wù)邏輯處理。 模型: 模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)處理。相當(dāng)于JavaBean。一個模型能為多個視圖提供數(shù)據(jù)。這提高了應(yīng)用程序的重用性 控制器: 當(dāng)用戶單擊Web頁面中的提交按鈕時,控制器接受請求并調(diào)用相應(yīng)的模型去處理請求,然后根據(jù)處理的結(jié)果調(diào)用相應(yīng)的視圖來顯示處理的結(jié)
2、果。 MVC的處理過程:首先控制器接受用戶的請求,調(diào)用相應(yīng)的模型來進行業(yè)務(wù)處理,并返回數(shù)據(jù)給控制器??刂破髡{(diào)用相應(yīng)的視圖來顯示處理的結(jié)果。并通過視圖呈現(xiàn)給用戶。Strutsstruts1.2和struts2.0的區(qū)別?如何控制兩種框架中的單例模式? struts1.2和struts2.0的對比 a、Action類: struts1.2要求Action類繼承一個基類。struts2.0 Action要求繼承ActionSupport基類 b、線程模式 struts1.2 Action是單例模式的并且必須是線程安全的,因為僅有一個Action的實例來處理所有的請求。單例策略限制了Struts1.2
3、 Action能做的事情,并且開發(fā)時特別小心。Action資源必須是線程安全的或同步的。 struts2.0 Action為每一個請求產(chǎn)生一個實例,因此沒有線程安全問題。 c、Servlet依賴 struts1.2 Action依賴于Servlet API,因為當(dāng)一個Action被調(diào)用時HttpServletRequest和HttpServletResponse被傳遞給execue方法。 struts2.0 Action不依賴于容器,允許Action脫離容器單獨測試。如果需要Struts2 Action仍然可以訪問初始的Request和Response。 但是,其他的元素減少或者消除了直接訪問
4、HttpServletRequest和HttpServletResponse的必要性。 d、可測性 測試struts1.2 Action的一個主要問題是execute方法暴露了Servlet API(這使得測試要依賴于容器)。一個第三方擴展:struts TestCase提供了一套struts1.2的模擬對象來進行測試。 Struts2.0 Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試,“依賴注入”也使得測試更容易。項目中為什么使用SSH 1. 使用Struts是因為struts是基于MVC模式的,很好的將應(yīng)用程序進行了分層,使開發(fā)者更關(guān)注于業(yè)務(wù)邏輯的實現(xiàn);第二,struts有著豐富的
5、taglib,如能靈活運用,則能大大提高開發(fā)效率。 2. 使用Hibernate:因為Hibernate為Java應(yīng)用提供了一個易用的、高效率的對象關(guān)系映射框架。hibernate是個輕量級的持久性框架,功能豐富。 3. 使用Spring:因為Spring基于IoC(Inversion of Control)和AOP構(gòu)架多層J2EE系統(tǒng)的框架,但它不強迫你必須在每一層中必須使用Spring,因為它模塊化得很好,允許你根據(jù)自己的需要選擇使用它的某一個模塊; 采用IoC使得可以很容易的實現(xiàn)bean的裝配,提供了簡潔的AOP并據(jù)此實現(xiàn)事務(wù)管理(Transcation Managment)等等。 st
6、ruts如何實現(xiàn)國際化 以下以兩國語言(中文,英文)為例: 1. 在工程中加入Struts支持 2. 編輯ApplicationRperties文件,在其中加入要使用國際化的信息, 例如: lable.welcome.china=Welcome! 3. 創(chuàng)建英文資源文件ApplicationResource_perites4. 創(chuàng)建臨時中文資源文件ApplicationResource_perites 例如:lable.welcom.china=中國歡迎您! 5. 對臨時中文資源文件進行編碼轉(zhuǎn)換??梢允褂胢yeclipse的插件,也可以在dos下執(zhí)行: native2ascii -encodi
7、ng gb2312 ApplicationResource_perties ApplicationResource_zh_CN.properties 6. 在jsp中加入struts的bean標(biāo)記庫 顯示信息: 可以在struts-config.xml文件中定義多個資源包,而每個資源包可使用key屬性指定包的名稱。struts2.0的常用標(biāo)簽 1. 往action里傳值: 2. 顯示標(biāo)簽 property 用于輸出指定值:3. 用于從頁面往action中(user)的對象內(nèi)傳值: 4. 判斷 用于在頁面中判斷指定數(shù)據(jù) . . 5. 迭代用于將List、Map、ArrayList等集合進行循環(huán)遍
8、歷 URL地址標(biāo)簽,用于生成一個URL地址,可以通過URL標(biāo)簽指定的子元素向URL地址發(fā)送請求參數(shù) 7. 超鏈接 一般和標(biāo)簽一起使用,用于帶多個參數(shù)。 a href= 超鏈接 8. set標(biāo)簽,用于將某個值放入指定的范圍內(nèi)。例如application,session等。 5.struts中怎么配置form-bean、action、tiles 此處配置的是struts1.2的 form-bean配置:(在配置文件struts-config.xml中): name: 指定form的名字; type指定form的類型:包名+類名; action配置:(在配置文件struts-config.xml中)
9、 path:請求Action的名字; attribute:form的名字,與form-bean中的name對應(yīng);input:輸入頁的路徑; name:如果配置了attribute,name不起作用,與attribute一樣;parameter:使用分發(fā)Action時,指定調(diào)用分發(fā)Action中的方法名; scope:Action的范圍; type:Action的類型:包名+類名; tites配置: 1. 新建一個 tiles-defs.xml文件,并在其中做如下配置: 2. 在web.xml和struts-config.xml和web.xml中做相應(yīng)配置: 在struts-config.xml
10、中配置如下: * * 在web.xml中配置如下: * definitions-config /WEB-INF/tiles-defs.xml * 3. 調(diào)用Tiles組件 Tiles組件是通過Struts Action來調(diào)用的,在struts-config.xml中做如下action配置: * *logic標(biāo)簽有哪幾個? 此標(biāo)簽庫可以分為三種類型:條件、循環(huán)、轉(zhuǎn)發(fā)/重定向。 1. 條件類型 (沒標(biāo)注的都比較簡單) logic:empty, logic:notEmpty; logic:equal, logic:notEqual, logic:lessThan, logic:greaterThan
11、,logic:lessEqual, logic:greaterEqual; logic:present, logic:notPresent; logic:match, logic:notMatch; 比較兩字符串是否相等,可以比較字符串的開始的、結(jié)尾的或其中的某個部分。location屬性:指定從某個位置開始進行比較。 2. 循環(huán)類型 logic:iterate 3. 轉(zhuǎn)發(fā)/重定向類型 logic:forward和logic:redirect logic:forward標(biāo)簽和jsp:forward標(biāo)簽相似,但它可以使用global forward中的一個ActionForward 例如: 與上
12、面相關(guān)的global forward中的代碼: logic:redirect標(biāo)簽和上面的標(biāo)簽類似,但它默認(rèn)調(diào)用的方法是response.sendRedirect(), 取代了上面的requestDispatcher.forward()。最大的不同是它支持所有html:link標(biāo)簽的屬性,所以你能夠指定request參數(shù): 在MVC框架下,不推薦使用這兩個標(biāo)簽,你應(yīng)該是從controller中選擇下一個view,而不是從view中選擇.在Jsp頁面中不要過多的使用logic標(biāo)簽。 action是單實例還是多實例,為什么? action是單實例的。當(dāng)多個用戶訪問一個請求的時候,服務(wù)器內(nèi)存中只有一個
13、與之對應(yīng)的action類對象。 因為當(dāng)服務(wù)器第一次加載struts的配置文件的時候,創(chuàng)建了一個Action后,每發(fā)送一個請求,服務(wù)器都會先去檢索相應(yīng)的范圍內(nèi)(request,session)是否存在這樣一個action實例,如果存在,則使用這個實例,如果不存在,則創(chuàng)建一個action實例。dispatchAction是用什么技術(shù)實現(xiàn)的? DispatchAction是Aciton的一個子類,主要解決了一個請求處理多個功能的問題 普通的Action你只能寫execute方法來處理業(yè)務(wù),而想用這一個Action處理多個任務(wù),你必須要請求參數(shù)進行解析,用if語句塊來處理 舉一個小例子: 有如下一個u
14、rl: http:/localhost:8080/myApp/addUserAction.do 如果你處理這個url的是一個普通的Action,那么就只能在execute里面執(zhí)行插入的相關(guān)操作,如果換成一下url: http:/localhost:8080/myApp/UserAction.do?method=add 你就應(yīng)該根據(jù)method對象的值來執(zhí)行相應(yīng)的操作,如再有一個路徑http:/localhost:8080/myApp/UserAction.do?method=delete 這個還可以使用那個Action來處理的,只是多判斷一下而已. 如果你用DispatchAction,就簡單
15、多了,所以dispatchAction還是用的Action的這么一個技術(shù)。struts2.0的mvc模式?與struts1.0的區(qū)別?struts2的mvc模式:當(dāng)用戶在頁面提交用戶請求時,該請求需要提交給struts2的控制器處理。struts2的控制器根據(jù)處理結(jié)果,決定將哪個頁面呈現(xiàn)給客戶端。與struts1最大的不同是:struts2的控制器。struts2的控制器不再像struts1的控制器,需要繼承一個Action父類,甚至可以無需實現(xiàn)任何接口,struts2的Action就是一個普通的POJO。實際上,Struts2 的Action就是一個包含execute方法的普通Java類,該
16、類里包含的多個屬性用于封裝用戶的請求參數(shù)。STRUTS的配置文件是什么?struts-config.xmlstruts的處理流程。一、ActionServlet的初始化ActionServlet作為Struts組件的前端控制器,由于web.xml的相應(yīng)配置:0在應(yīng)用一加載時即會被實例化并調(diào)用其init方法,init方法所做的主要工作有二:1. 加載struts配置文件,并創(chuàng)建用于封裝配置信息的ModuleConfig對象2. 加載資源文件,并創(chuàng)建用于封裝資源文件的MessageResources對象需要注意兩點:如果web.xml有多模塊配置,將創(chuàng)建多個ModuleConfig對象和Messa
17、geResources對象分別用于封裝各個模塊的struts配置文件和資源文件。針對各個模塊所創(chuàng)建的ModuleConfig對象和MessageResources對象將存儲在ServletContext中,對應(yīng)的屬性名中有該模塊名稱的相應(yīng)標(biāo)識。另外,如果有相應(yīng)配置的話,init方法還將初始化數(shù)據(jù)源和PlugIn二、ActionServlet的process所有形如*.do的請求(根據(jù)web.xml中的相關(guān)配置)將提交給ActionServlet,最終將調(diào)用其process方法。process方法的主要工作有三:1. 根據(jù)請求信息獲知所請求的模塊名稱,從ServletContext中獲得與請求模
18、塊對應(yīng)的的ModuleConfig對象,并存儲到request中。2. 根據(jù)模塊信息獲得相應(yīng)的RequestProcessor對象,一個模塊對應(yīng)一個RequestProcessor對象,RequestProcessor對象將關(guān)聯(lián)與所屬模塊對應(yīng)的ModuleConfig對象。3. 調(diào)用RequestProcessor對象的process方法,將request和response作為參數(shù)傳遞給它。三、RequestProcessor的processRequestProcessor對象的process方法的主要工作有五步:1. 調(diào)用自己的 processPreprocess(request, resp
19、onse)方法,該方法不進行任何操作,用于子類重寫擴展其功能。2. 獲得與請求地址所匹配的ActionMapping對象,AcionMapping對象用于封裝一個特定acion的配置信息。3. 根據(jù)ActionMapping中的配置信息獲得ActionForm對象(該對象將緩存到request或session中),并將表單數(shù)據(jù)填充到ActionForm中,然后根據(jù)ActionMapping的配置決定是否驗證ActionForm,如果驗證,將調(diào)用ActionForm的 validate方法,若其返回的ActionErros對象中包含ActionMessage對象則表示驗證失敗,將轉(zhuǎn)向action
20、配置信息input屬性所指示的地址。4. 如果ActionForm無需驗證或驗證通過將創(chuàng)建并緩存與請求地址匹配的Action對象,將ActionMapping對象、ActionForm對象、request和response作為參數(shù)調(diào)用其execute方法。5.根據(jù)Action對象的execute方法返回的ActionForward對象,將請求轉(zhuǎn)發(fā)或重定向到該ActionForward所封裝的地址。用struts +hibernate做一個增刪查改(機試)Struts2.0與Struts1.x有何區(qū)別。Feature特征 Struts 1 Struts1Struts 2 Struts2 Acti
21、on classes行動班 Struts 1 requires Action classes to extend an abstract base class. Struts的一要求采取行動班,以延長一個抽象的基類。 A common problem in Struts 1 is programming to abstract classes instead of interfaces.一個共同的問題在Struts的一,是編程抽象類而不是接口。 An Struts 2 Action may implement an Action interface, along with other inte
22、rfaces to enable optional and custom services. 1 2 Struts的行動, 可能實施一項行動的界面,隨著其他接口,使可選和定制服務(wù)。 Struts 2 provides a base ActionSupport class to implement commonly used interfaces. Struts的2提供了相應(yīng)的actionsupport一流的執(zhí)行常用的接口。 Albeit, the Action interface is not required.雖然,這項行動的界面是不是必需的 。 Any POJO object with a
23、 execute signature can be used as an Struts 2 Action object.任何波霍對象與執(zhí)行的簽名可以被用來作為一個Struts的二行動的對象。 Threading Model線程模型 Struts 1 Actions are singletons and must be thread-safe since there will only be one instance of a class to handle all requests for that Action. Struts的一行動是單身,必須線程安全的,因為將只有一個實例一類來處理所有的
24、請求采取行動。 The singleton strategy places restrictions on what can be done with Struts 1 Actions and requires extra care to develop.單身人士策略地方的限制,可以做些什么與Struts的一行動,并要求加倍小心發(fā)展。 Action resources must be thread-safe or synchronized.行動的資源,必須線程安全的或同步。 Struts 2 Action objects are instantiated for each request, s
25、o there are no thread-safety issues. 2 Struts的行動對象是實例對于每個請求,因此沒有線程安全問題。 (In practice, servlet containers generate many throw-away objects per request, and one more object does not impose a performance penalty or impact garbage collection.) (在實踐中, Servlet的容器,產(chǎn)生許多扔離家出走的對象,每次請求,并多一個對象不施加表現(xiàn)罰款,或影響垃圾收集) 。
26、 Servlet Dependency Servlet的依賴 Struts 1 Actions have dependencies on the servlet API since the HttpServletRequest and HttpServletResponse is passed to the execute method when an Action is invoked. Struts的一行動,依賴于該Servlet的空氣污染指數(shù)以來, httpservletrequest和httpservletresponse傳遞給Execute方法,當(dāng)一個行動是引用。 Struts 2
27、Actions are not coupled to a container. Struts的行動,二是不耦合的一個貨柜。 Most often the servlet contexts are represented as simple Maps, allowing Actions to be tested in isolation.最經(jīng)常的Servlet的背景是派代表作為簡單的地圖,讓行動,以測試陷入孤立的境地。 Struts 2 Actions can still access the original request and response, if required. 2 Strut
28、s的行動仍然可以使用原來的請求和響應(yīng),如果需要。 However, other architectural elements reduce or eliminate the need to access the HttpServetRequest or HttpServletResponse directly.不過,其他建筑元素,減少或消除需要訪問httpservetrequest或httpservletresponse直接。 Testability測試 A major hurdle to testing Struts 1 Actions is that the execute method
29、exposes the Servlet API.一個主要障礙,以測試Struts的一行動是Execute方法暴露了Servlet的空氣污染指數(shù)。 A third-party extension, Struts TestCase, offers a set of mock object for Struts 1.第三黨的擴展, Struts的testcase ,提供了一套模擬對象的Struts 1 。 Struts 2 Actions can be tested by instantiating the Action, setting properties, and invoking metho
30、ds. 2 Struts的行動可以測試實例化的行動,設(shè)置屬性,引用的方法。 Dependency Injection support also makes testing simpler.依賴注入的支持也使測試更簡單。 Harvesting Input收獲投入 Struts 1 uses an ActionForm object to capture input. Struts的一使用actionform對象捕獲輸入。 Like Actions, all ActionForms must extend a base class.一樣的行動,所有actionforms必須擴大基地,一流的。 Si
31、nce other JavaBeans cannot be used as ActionForms, developers often create redundant classes to capture input.由于其他的JavaBeans不能被用來作為actionforms ,開發(fā)商常常造成多余的班,以捕捉的投入。 DynaBeans can used as an alternative to creating conventional ActionForm classes, but, here too, developers may be redescribing existing
32、 JavaBeans. dynabeans可以用來作為一種替代創(chuàng)造常規(guī)actionform班,但這里太,發(fā)展商可能會redescribing現(xiàn)有的JavaBeans 。 Struts 2 uses Action properties as input properties, eliminating the need for a second input object. Struts的2使用性能的行動作為輸入屬性,不再需要第二個輸入對象。 Input properties may be rich object types which may have their own properties.輸
33、入屬性可能是豐富的對象類型可能有自己的屬性。 The Action properties can be accessed from the web page via the taglibs.行動性質(zhì)可以從網(wǎng)頁上通過taglibs 。 Struts 2 also supports the ActionForm pattern, as well as POJO form objects and POJO Actions. Struts的2還支持actionform模式,以及波霍形式,對象和波霍行動。 Rich object types, including business or domain o
34、bjects, can be used as input/output objects.豐富的對象類型,其中包括商業(yè)利益或域?qū)ο?,可以被用來作為輸?輸出對象。 The ModelDriven feature simplifies taglb references to POJO input objects.該modeldriven功能簡化taglb的提述,波霍投入對象。 Expression Language語言表達 Struts 1 integrates with JSTL, so it uses the JSTL EL. Struts的一整合與jstl ,所以它使用jstl下午。 The
35、 EL has basic object graph traversal, but relatively weak collection and indexed property support.的El已基本對象圖遍歷,但相對薄弱的收集和索引財產(chǎn)的支持。 Struts 2 can use JSTL, but the framework also supports a more powerful and flexible expression language called Object Graph Notation Language (OGNL). Struts的二可以使用jstl ,但框架也
36、支持一個更強大和靈活的語言表達所謂的“對象圖形符號語言” ( ognl ) 。 Binding values into views有約束力的價值觀納入意見 Struts 1 uses the standard JSP mechanism for binding objects into the page context for access. Struts的一使用標(biāo)準(zhǔn)的JSP機制,有約束力的物體進入該網(wǎng)頁的背景下訪問。 Struts 2 uses a ValueStack technology so that the taglibs can access values without coup
37、ling your view to the object type it is rendering. Struts的2使用“ valuestack ”技術(shù),使該taglibs可以訪問的價值觀沒有耦合您的看法,以對象類型,這是渲染。 The ValueStack strategy allows reuse of views across a range of types which may have the same property name but different property types.該valuestack策略允許重用的意見覆蓋的類型可能有相同的屬性名稱,但不同的屬性類型。 T
38、ype Conversion類型轉(zhuǎn)換 Struts 1 ActionForm properties are usually all Strings. Struts的一actionform屬性通常是所有字符串。 Struts 1 uses Commons-Beanutils for type conversion. Struts的一用途的商品- beanutils為類型轉(zhuǎn)換。 Converters are per-class, and not configurable per instance.轉(zhuǎn)換器每級的,而不是配置的每個實例。 Struts 2 uses OGNL for type conv
39、ersion. Struts的2使用ognl為類型轉(zhuǎn)換。 The framework includes converters for basic and common object types and primitives.該框架包括轉(zhuǎn)換為基本和共同的對象類型和原始。 Validation驗證 Struts 1 supports manual validation via a validate method on the ActionForm, or through an extension to the Commons Validator. Struts的一支持手冊審定通過驗證方法對acti
40、onform ,或通過一個擴展到商品校驗。 Classes can have different validation contexts for the same class, but cannot chain to validations on sub-objects.班級可以有不同的驗證背景為同一階層,但不能鏈,以驗證就分對象。 Struts 2 supports manual validation via the validate method and the XWork Validation framework. Struts的2支持手冊審定通過驗證的方法和xwork的驗證框架。 Th
41、e Xwork Validation Framework supports chaining validation into sub-properties using the validations defined for the properties class type and the validation context.該xwork的驗證框架支持鏈接驗證分為分性能的使用驗證的定義為性能一流的類型和驗證。 Control Of Action Execution控制行動的執(zhí)行 Struts 1 supports separate Request Processors (lifecycles
42、) for each module, but all the Actions in the module must share the same lifecycle. Struts的一支持獨立的請求處理器(生命周期)為每個單元,但所有的行動,在該模塊必須共用相同的生命周期。 Struts 2 supports creating different lifecycles on a per Action basis via Interceptor Stacks. 2 Struts的支持,創(chuàng)造不同的生命周期對每行動的基礎(chǔ)上通過攔截堆疊。 Custom stacks can be created an
43、d used with different Actions, as needed.自定義棧,才能創(chuàng)造和使用不同的行動,視需要。 Struts/webwork 的工作機制,它有哪些標(biāo)簽Struts 2框架的大致處理流程如下:瀏覽器發(fā)送請求,例如請求/mypage.action、/reports/myreport.pdf等。核心控制器FilterDispatcher根據(jù)請求決定調(diào)用合適的Action。WebWork的攔截器鏈自動對請求應(yīng)用通用功能,例如workflow、validation或文件上傳等功能?;卣{(diào)Action的execute方法,該execute方法先獲取用戶請求參數(shù),然后執(zhí)行某種數(shù)
44、據(jù)庫操作,既可以是將數(shù)據(jù)保存到數(shù)據(jù)庫,也可以從數(shù)據(jù)庫中檢索信息。實際上,因為Action只是一個控制器,它會調(diào)用業(yè)務(wù)邏輯組件來處理用戶的請求。Action的execute方法處理結(jié)果信息將被輸出到瀏覽器中,可以是HTML頁面、圖像,也可以是PDF文檔或者其他文檔。此時支持的視圖技術(shù)非常多,既支持JSP,也支持Velocity、FreeMarker等模板技術(shù)。Hibernate什么是Hibernate的并發(fā)機制?怎么去處理并發(fā)問題? Hibernate并發(fā)機制: a、Hibernate的Session對象是非線程安全的,對于單個請求,單個會話,單個的工作單元(即單個事務(wù),單個線程),它通常只使用
45、一次,然后就丟棄。如果一個Session 實例允許共享的話,那些支持并發(fā)運行的,例如Http request,session beans將會導(dǎo)致出現(xiàn)資源爭用。如果在Http Session中有hibernate的Session的話,就可能會出現(xiàn)同步訪問Http Session。只要用戶足夠快的點擊瀏覽器的“刷新”, 就會導(dǎo)致兩個并發(fā)運行的線程使用同一個Session。 b、多個事務(wù)并發(fā)訪問同一塊資源,可能會引發(fā)第一類丟失更新,臟讀,幻讀,不可重復(fù)讀,第二類丟失更新一系列的問題。 解決方案:設(shè)置事務(wù)隔離級別。 Serializable:串行化。隔離級別最高 Repeatable Read:可重復(fù)
46、讀 Read Committed:已提交數(shù)據(jù)讀 Read Uncommitted:未提交數(shù)據(jù)讀。隔離級別最差 設(shè)置鎖:樂觀鎖和悲觀鎖。 樂觀鎖:使用版本號或時間戳來檢測更新丟失,在的映射中設(shè)置 optimistic-lock=all可以在沒有版本或者時間戳屬性映射的情況下實現(xiàn) 版本檢查,此時Hibernate將比較一行記錄的每個字段的狀態(tài) 行級悲觀鎖:Hibernate總是使用數(shù)據(jù)庫的鎖定機制,從不在內(nèi)存中鎖定對象!只要為JDBC連接指定一下隔 離級別,然后讓數(shù)據(jù)庫去搞定一切就夠了。類LockMode 定義了Hibernate所需的不同的鎖定級別:LockMode.UPGRADE,LockMo
47、de.UPGRADE_NOWAIT,LockMode.READ;Hibernate和spring中常出現(xiàn)的幾個異常 org.springframework.beans.factory.BeanCreationException: Error creating bean with name sessionFactory defined in ServletContext resource /WEB-INF/applicationContext.xml: Initialization of bean failed; nested exception is org.hibernate.Mapping
48、Exception: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column: password (should be mapped with insert=false update=false) 出錯原因:password 和repassword同時對應(yīng)數(shù)據(jù)庫表中的password一列,同時update和insert都設(shè)為true。xml文件如下: 解決方法:將repassword的insert和update設(shè)為false。 org.springframework.bea
49、ns.factory.BeanCreationException: Error creating bean with name sessionFactory defined in ServletContext resource /WEB-INF/applicationContext.xml: Initialization of bean failed;nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for ID in class 錯誤原因:hibernate的映射文件中ID
50、是大寫的,而pojo的類中id是小寫的 解決方法:要么將pojo類中的id改稱大寫,要么把hibernate的映射文件中的ID改稱小寫。Hibernate與jdbc的聯(lián)系 hibernate是jdbc的輕量級封裝,包括jdbc的與數(shù)據(jù)庫的連接(用perty的配置文件實現(xiàn)當(dāng)然本質(zhì)是封裝了jdbc的forname), 和查詢,刪除等代碼,都用面向?qū)ο蟮乃枷胗么a聯(lián)系起來,hibernate通過hbm 配置文件把po類的字段和數(shù)據(jù)庫的字段關(guān)聯(lián)起來比如數(shù)據(jù)庫的id, 在po類中就是pravite Long id; public Long getId() ;public setId(Long id);
51、然后hql語句也是面向?qū)ο蟮模牟樵冋Z句不是查詢數(shù)據(jù)庫而是查詢類的,這些實現(xiàn)的魔法就是xml文件,其實hibernate=封裝的jdbc+xml文件Hibernate與spring的聯(lián)系 Hibernate中的一些對象可以給Spring來管理,讓Spring容器來創(chuàng)建hibernate中一些對象實例化。例如:SessionFactory,HibernateTemplate等。 Hibernate本來是對數(shù)據(jù)庫的一些操作,放在DAO層,而Spring給業(yè)務(wù)層的方法定義了事務(wù),業(yè)務(wù)層調(diào)用DAO層的方法,很好的將Hibernate的操作也加入到事務(wù)中來了。Hibernate自帶的分頁機制是什么?如
52、果不使用Hibernate自帶的分頁,則采用什么方式分頁? 1、hibernate自帶的分頁機制:獲得Session對象后,從Session中獲得Query對象。用Query.setFirstResult():設(shè)置要顯示的第一行數(shù)據(jù), Query.setMaxResults():設(shè)置要顯示的最后一行數(shù)據(jù)。 2、不使用hibernate自帶的分頁,可采用sql語句分頁, 如:5:為每頁顯示的記錄,2為當(dāng)前頁: select * top 5 from table where tabId not in (select tabId top (2-1)*5 from table); hibernate的
53、對象的三種持久化狀態(tài),并給出解釋? 不清楚hibernate的對象的三種持久化狀態(tài),只知道hibernate對象的三種狀態(tài),下面有介紹。hibernate中一對多配置文件返回的是什么? hibernate中一對多配置文件會相應(yīng)的映射為兩張表,并且它們之間的關(guān)系是一對多的。例如:一個student和classes表的關(guān)系 。一個學(xué)生只能是一個班的,一個班可以有多個學(xué)生。update()和saveOrUpdate()的區(qū)別? update()和saveOrUpdate()是用來對跨Session的PO進行狀態(tài)管理的。 update()方法操作的對象必須是持久化了的對象。也就是說,如果此對象在數(shù)據(jù)庫
54、中不存在的話,就不能使用update()方法。 saveOrUpdate()方法操作的對象既可以使持久化了的,也可以使沒有持久化的對象。如果是持久化了的對象調(diào)用saveOrUpdate()則會 更新數(shù)據(jù)庫中的對象;如果是未持久化的對象使用此方法,則save到數(shù)據(jù)庫中。hibernate的三種狀態(tài)之間如何轉(zhuǎn)換 當(dāng)對象由瞬時狀態(tài)(Transient)轉(zhuǎn)變到save()時,就變成了持久化狀態(tài)。 當(dāng)我們在Session里存儲對象的時候,實際是在Session的Map里存了一份,也就是它的緩存里放了一份,然后,又到數(shù)據(jù)庫里存了一份,在緩存里這一份叫持久對象(Persistent)。 Session 轉(zhuǎn)變
55、到 Close()了,它的緩存也都關(guān)閉了,整個Session也就失效了,此時,對象變成游離狀態(tài)(Detached),但數(shù)據(jù)庫中還是存在的。 當(dāng)游離狀態(tài)(Detached) update()時,又變?yōu)榱顺志脿顟B(tài)(Persistent)。 當(dāng)持久狀態(tài)(Persistent) delete()時,又變?yōu)榱怂矔r狀態(tài)(Transient),此時,數(shù)據(jù)庫中沒有與之對應(yīng)的記錄。hibernate拒絕連接、服務(wù)器崩潰的原因?最少寫5個1. db沒有打開 2. 網(wǎng)絡(luò)連接可能出了問題3. 連接配置錯了4. 驅(qū)動的driver,url是否都寫對了5. LIB下加入相應(yīng)驅(qū)動,數(shù)據(jù)連接代碼是否有誤6. 數(shù)據(jù)庫配置可能有
56、問題7. 當(dāng)前聯(lián)接太多了,服務(wù)器都有訪問人數(shù)限制的8. 服務(wù)器的相應(yīng)端口沒有開,即它不提供相應(yīng)的服務(wù)9 hibernate有哪些緩存,分別怎么使用?10 你對hibernate的了解到了一個什么樣的程度?11 寫出一個sql語句體現(xiàn)hibernate中一對多的關(guān)系Hibernate介紹Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,H
57、ibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。Hibernate的核心接口一共有5個,分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個核心接口在任何開發(fā)中都會用到。通過這些接口,不僅可以對持久化對象進行存取,還能夠進行事務(wù)控制。下面對這五個核心接口分別加以介紹。Session接口:Session接口負(fù)責(zé)執(zhí)行被持久化對象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫的交流,包含了很多常見的SQL語句。)。但需要注意的是Session對象是非線程安全的。同時,Hibernate的sessi
58、on不同于JSP應(yīng)用中的HttpSession。這里當(dāng)使用session這個術(shù)語時,其實指的是Hibernate中的session,而以后會將HttpSesion對象稱為用戶session。SessionFactory接口:SessionFactroy接口負(fù)責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲源的代理,并負(fù)責(zé)創(chuàng)建Session對象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當(dāng)需要操作多個數(shù)據(jù)庫時,可以為每個數(shù)據(jù)庫指定一個SessionFactory。Configuration接口:C
59、onfiguration接口負(fù)責(zé)配置并啟動Hibernate,創(chuàng)建SessionFactory對象。在Hibernate的啟動的過程中,Configuration類的實例首先定位映射文檔位置、讀取配置,然后創(chuàng)建SessionFactory對象。Transaction接口:Transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,開發(fā)人員也可以設(shè)計編寫自己的底層事務(wù)處理代碼。Query和Criteria接口:Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫查詢。它可以使用HQL語言或SQL語句兩種表達方式。 Hibernate主鍵介紹AssignedAssigned方式由程序生成主鍵值,并且要
60、在save()之前指定否則會拋出異常特點:主鍵的生成值完全由用戶決定,與底層數(shù)據(jù)庫無關(guān)。用戶需要維護主鍵值,在調(diào)用session.save()之前要指定主鍵值。HiloHilo使用高低位算法生成主鍵,高低位算法使用一個高位值和一個低位值,然后把算法得到的兩個值拼接起來作為數(shù)據(jù)庫中的唯一主鍵。Hilo方式需要額外的數(shù)據(jù)庫表和字段提供高位值來源。默認(rèn)請況下使用的表是hibernate_unique_key,默認(rèn)字段叫作next_hi。next_hi必須有一條記錄否則會出現(xiàn)錯誤。特點:需要額外的數(shù)據(jù)庫表的支持,能保證同一個數(shù)據(jù)庫中主鍵的唯一性,但不能保證多個數(shù)據(jù)庫之間主鍵的唯一性。Hilo主鍵生成方
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 心理驅(qū)動的學(xué)習(xí)教育心理學(xué)的奧秘
- 教育信息化背景下的科技型議題式教學(xué)研究
- 大數(shù)據(jù)背景下的智慧學(xué)習(xí)環(huán)境建設(shè)
- 教育驅(qū)動鄉(xiāng)村振興-以在線水稻種植課程為例
- 數(shù)字教育資源庫的版權(quán)管理方案設(shè)計
- 兒童心理輔導(dǎo)與教育策略實訓(xùn)
- 基于用戶情感的在線教育平臺界面優(yōu)化策略
- 中職招生宣傳課件
- 提升勞動者自我效能感的教育心理學(xué)方法
- 基于教育心理學(xué)的個性化學(xué)習(xí)方案
- 2025注冊核安全工程師考前沖刺試卷帶答案
- (高清版)DG∕TJ 08-2166-2015 城市地下綜合體設(shè)計規(guī)范
- 國家數(shù)據(jù)局《2024年“數(shù)據(jù)要素×”項目案例集》
- (2025)行政能力測試題庫與答案
- 一級建造師安全生產(chǎn)試題及答案
- 機械質(zhì)檢員試題及答案
- CSCO 膽道惡性腫瘤指南更新2025
- WB/T 1139-2024國家物流樞紐統(tǒng)計分類
- 2025年4月版安全環(huán)境職業(yè)健康法律法規(guī)標(biāo)準(zhǔn)文件清單
- 2025年保安員職業(yè)技能考試筆試試題(100題)附答案
- 社區(qū)急救知識培訓(xùn)課件
評論
0/150
提交評論