Java---SSH(MVC)面試題

Java---SSH(MVC)html

1. 談談你mvc的理解前端

    MVCModelViewControler的簡稱。即模型—視圖—控制器。MVC是一種設計模式,它強制性的把應用程序的輸入、處理和輸出分開。java

    MVC中的模型、視圖、控制器它們分別擔負着不一樣的任務。程序員

    視圖視圖是用戶看到並與之交互的界面。視圖向用戶顯示相關的數據,並接受用戶的輸入。視圖不進行任何業務邏輯處理。web

    模型模型表示業務數據和業務處理。至關於JavaBean。一個模型能爲多個視圖提供數據。這提升了應用程序的重用性算法

    控制器當用戶單擊Web頁面中的提交按鈕時,控制器接受請求並調用相應的模型去處理請求。spring

            而後根據處理的結果調用相應的視圖來顯示處理的結果。sql

    MVC的處理過程:首先控制器接受用戶的請求,調用相應的模型來進行業務處理,並返回數據給控制器。控制器調用相應的視圖來顯示處理的結果。並經過視圖呈現給用戶。數據庫

Strutsexpress

1. struts1.2struts2.0的區別?如何控制兩種框架中的單例模式?

   struts1.2struts2.0的對比

   aAction類:

      struts1.2要求Action類繼承一個基類。struts2.0 Action要求繼承ActionSupport基類

   b、線程模式

      struts1.2 Action是單例模式的而且必須是線程安全的,由於僅有一個Action的實例來處理全部的請求。

      單例策略限制了Struts1.2 Action能作的事情,而且開發時特別當心。Action資源必須是線程安全的或同步的。

      struts2.0 Action爲每個請求產生一個實例,所以沒有線程安全問題。

   cServlet依賴

      struts1.2 Action依賴於Servlet API,由於當一個Action被調用時HttpServletRequestHttpServletResponse被傳遞給execut方法。

      struts2.0 Action不依賴於容器,容許Action脫離容器單獨測試。若是須要,Struts2 Action仍然能夠訪問初始的RequestResponse

      可是,其餘的元素減小或者消除了直接訪問HttpServletRequestHttpServletResponse的必要性。

   d、可測性

      測試struts1.2 Action的一個主要問題是execute方法暴露了Servlet API(這使得測試要依賴於容器)。一個第三方擴展:struts TestCase

      提供了一套struts1.2的模擬對象來進行測試。

      Struts2.0 Action能夠經過初始化、設置屬性、調用方法來測試,「依賴注入」也使得測試更容易。

 

2. 項目中爲何使用SSH

    1. 使用Struts是由於struts是基於MVC模式的,很好的將應用程序進行了分層,使開發者更關注於業務邏輯的實現;第二,struts有着豐富的taglib,如能靈活運用,則能大大提升開發效率。

    2. 使用Hibernate:由於hibernateJava應用提供了一個易用的、高效率的對象關係映射框架。hibernate是個輕量級的持久性框架,功能豐富。

    3. 使用Spring:由於spring基於IoC(Inversion of Control,反向控制)AOP構架多層j2ee系統的框架,但它不強迫你必須在每一層中必須使用Spring,由於它模塊化的很好,容許你根據本身的須要選擇使用它的某一個模塊;

       採用IoC使得能夠很容易的實現bean的裝配,提供了簡潔的AOP並據此實現事務管理(Transcation Managment),等等 

 

3. strutsspring是如何繼承的

    不懂題目之意:是不是說的strutsaction都繼承自org.apache.struts.action.Action

    而Spring中的繼承就不清楚了。

4. struts如何實現國際化

    如下以兩國語言(中文,英文)爲例:

    1. 在工程中加入Struts支持

    2. 編輯ApplicationResource.properties文件,在其中加入要使用國際化的信息例如: lable.welcome.china=Welcome!!!

    3. 建立英文資源文件ApplicationResource_en.properites

    4. 建立臨時中文資源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中國歡迎您!

    5. 對臨時中文資源文件進行編碼轉換。可使用myeclipse的插件,也能夠在dos下執行:

       native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties

    6. jsp中加入strutsbean標記庫 <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

       顯示信息: <bean:message key="label.welcome.china">

能夠在struts-config.xml文件中定義多個資源包,而每一個資源包可以使用key屬性指定包的名稱。

5. struts2.0的經常使用標籤

    1. action裏傳值:<input name="userName" type="text" class="input6" size="15"> 

    2. 顯示標籤 property 用於輸出指定值:<s:property value="userName "/>

  3. 用於從頁面往action(user)的對象內傳值:<s:text name="user.userName " id="username"/> 

    4. 判斷<s:if> </s:if> 用於在頁面中判斷指定數據 <s:if test="userName == admin">. </s:if> <s:else>. </s:else>

    5. 迭代<s:iterator>用於將ListMapArrayList等集合進行循環遍歷 

       <s:iterator value="userList" id="user" status="u"> 

          <s:property value="userName"/></a> 

       </s:iterator> 

    6. URL地址標籤,<s:url>用於生成一個URL地址,能夠經過URL標籤指定的<s:param>子元素向URL地址發送請求參數 

       <s:url action=" "> 

          <s:param name=" " value=""></s:param> 

       </s:url>

    7. 超連接 <a href >通常和<s:url>標籤一塊兒使用,用於帶多個參數。 

       <a href=" 

          <s:url action=" "> 

             <s:param name=" " value=""></s:param> 

             <s:param name=" " value=""></s:param> 

             <s:param name=" " value=""></s:param> 

          </s:url>

       ">超連接</a>

    8. set標籤,用於將某個值放入指定的範圍內。例如application,session等。 

       <s:set name="user" value="userName" scope=」request」/>

6. struts中怎麼配置form-beanactiontiles

    此處配置的是struts1.2

    form-bean配置:(在配置文件struts-config.xml)

    <form-beans >

   <form-bean name="" type=""></form-bean>

   </form-beans>

    name: 指定form的名字; type指定form的類型:包名+類名;

   action配置:(在配置文件struts-config.xml)

   <action-mappings >

   <action path="" 

           attribute=""

           input=""

           name=""

           parameter=""

           scope="request"

           type=""

           ></action>

   </action-mappings>

   path:請求Action的名字;   attributeform的名字,form-bean中的name對應;   input:輸入頁的路徑

   name:若是配置了attribute,name不起做用,attribute同樣;   parameter:使用分發Action,指定調用分發Action中的方法名;

   scopeAction的範圍;    typeAction的類型:包名+類名;

   

   tites配置:

   1. 新建一個 tiles-defs.xml文件,並在其中作以下配置:

      <?xml version="1.0" encoding="UTF-8"?>

      <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">

      <tiles-definitions> 

        <definition name="member-definition" path="/Jsp/layout.jsp">  

          <put name="top" value="/mTop.do"/>  

          <put name="left" value="/mLeft.do"/>

          <put name="main" value="/defaultMmain.do"/> 

        </definition>

     </tiles-definitions>

   2. web.xmlstruts-config.xmlweb.xml中作相應配置:

      在struts-config.xml中配置以下:

      ************

      <plug-in className="org.apache.struts.tiles.TilesPlugin">

         <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>   

         <set-property property="definitions-parser-validate" value="true"/> 

      </plug-in>

      ************

      在web.xml中配置以下:

      ************

      <init-param>    

         <param-name>definitions-config</param-name>    

         <param-value>/WEB-INF/tiles-defs.xml</param-value>

      </init-param>

      *************

   3. 調用Tiles組件

      Tiles組件是經過Struts Action來調用的,在struts-config.xml中作以下action配置:

      *************

      <action

        path="/member"

        parameter="member-definition"

        type="org.apache.struts.actions.ForwardAction"/>

     **************

7. logic標籤有哪幾個?

    此標籤庫能夠分爲三種類型:條件、循環、轉發/重定向。

    1. 條件類型 (沒標註的都比較簡單)

       logic:empty, logic:notEmpty;

       logic:equal, logic:notEqual, logic:lessThan, logic:greaterThan,logic:lessEqual, logic:greaterEqual;

       logic:present, logic:notPresent;

       logic:match, logic:notMatch; 比較兩字符串是否相等,能夠比較字符串的開始的、結尾的或其中的某個部分。location屬性:指定從某個位置開始進行比較。

    

    2. 循環類型

       logic:iterate

    

    3. 轉發/重定向類型

       logic:forwardlogic:redirect 

       logic:forward標籤和jsp:forward標籤類似,但它可使用global forward中的一個ActionForward

       例如:<logic:forward name="login" />

       ------------------------------------------------------------------------------

       與上面相關的global forward中的代碼:

       <global-forwards>

          <forward name="login" path="/loginForm.jsp"/>

       </global-forwards>

       logic:redirect標籤和上面的標籤相似,但它默認調用的方法是response.sendRedirect()

       取代了上面的requestDispatcher.forward()。最大的不一樣是它支持全部html:link標籤的屬性,因此你可以指定request參數:

       <logic:redirect name="login" paramId="employeeId" paramName="employee" property="id" /> 

       在MVC框架下,不推薦使用這兩個標籤,你應該是從controller中選擇下一個view,而不是從view中選擇.Jsp頁面中不要過多的使用logic標籤。

 

8. action是單實例仍是多實例,爲何?

    action是單實例的。當多個用戶訪問一個請求的時候,服務器內存中只有一個與之對應的action類對象。

    由於當服務器第一次加載struts的配置文件的時候,建立了一個Action,每發送一個請求,服務器都會先去檢索相應的範圍內(request,session)是否存在

    這樣一個action實例,若是存在,則使用這個實例,若是不存在,則建立一個action實例。

9. dispatchAction是用什麼技術實現的?

    DispatchAction 是Aciton的一個子類,主要解決了一個請求處理多個功能的問題 

    普通的Action你只能寫execute方法來處理業務,而想用這一個Action處理多個任務,你必需要請求參數進行解析,if語句塊來處理 

    舉一個小例子

    有以下一個url:  http://localhost:8080/myApp/addUserAction.do 

    若是你處理這個url的是一個普通的Action,那麼就只能在execute裏面執行插入的相關操做,若是換成一下url: 

    http://localhost:8080/myApp/UserAction.do?method=add 

    你就應該根據method對象的值來執行相應的操做,如再有一個路徑http://localhost:8080/myApp/UserAction.do?method=delete 

    這個還可使用那個Action來處理的,只是多判斷一下而已

若是你用DispatchAction,就簡單多了,因此dispatchAction仍是用的Action的這麼一個技術。

10. struts2.0mvc模式?與struts1.0的區別?

    struts2mvc模式:當用戶在頁面提交用戶請求時,該請求須要提交給struts2的控制器處理。struts2的控制器根據處理結果,

    決定將哪一個頁面呈現給客戶端。

    與struts1最大的不一樣是:struts2的控制器。struts2的控制器再也不像struts1的控制器,須要繼承一個Action父類,甚至能夠無需實現

    任何接口,struts2Action就是一個普通的POJO。實際上,Struts2 Action就是一個包含execute方法的普通Java

    該類裏包含的多個屬性用於封裝用戶的請求參數。

11. STRUTS的配置文件是什麼?

struts-config.xml

12. 請寫出Struts的工做原理。

13. struts的處理流程。

1、ActionServlet的初始化
ActionServlet做爲Struts組件的前端控制器,因爲web.xml的相應配置:

<load-on-startup>0</load-on-startup>
在應用一加載時即會被實例化並調用其init方法,init方法所作的主要工做有二:

1. 加載struts配置文件,並建立用於封裝配置信息的ModuleConfig對象
2. 加載資源文件,並建立用於封裝資源文件的MessageResources對象
須要注意兩點:若是web.xml有多模塊配置,將建立多個ModuleConfig對象和MessageResources對象分別

用於封裝各個模塊的struts配置文件和資源文件。
針對各個模塊所建立的ModuleConfig對象和MessageResources對象將存儲在ServletContext中,對應的屬

性名中有該模塊名稱的相應標識。
另外,若是有相應配置的話,init方法還將初始化數據源和PlugIn

2、ActionServlet的process
全部形如*.do的請求(根據web.xml中的相關配置)將提交給ActionServlet,最終將調用其process方法

。process方法的主要工做有三:

1.  根據請求信息獲知所請求的模塊名稱,從ServletContext中得到與請求模塊對應的的ModuleConfig對

象,並存儲到request中。
2.  根據模塊信息得到相應的RequestProcessor對象,一個模塊對應一個RequestProcessor對象,

RequestProcessor對象將關聯與所屬模塊對應的ModuleConfig對象。
3.  調用RequestProcessor對象的process方法,將request和response做爲參數傳遞給它。

3、RequestProcessor的process
RequestProcessor對象的process方法的主要工做有五步:
1.  調用本身的 processPreprocess(request, response)方法,該方法不進行任何操做,用於子類重寫

擴展其功能。
2.  得到與請求地址所匹配的ActionMapping對象,AcionMapping對象用於封裝一個特定acion的配置信息


3.  根據ActionMapping中的配置信息得到ActionForm對象(該對象將緩存到request或session中),並

將表單數據填充到ActionForm中,而後根據ActionMapping的配置決定是否驗證ActionForm,若是驗證,

將調用ActionForm的 validate方法,若其返回的ActionErros對象中包含ActionMessage對象則表示驗證

失敗,將轉向action配置信息 input屬性所指示的地址。
4.  若是ActionForm無需驗證或驗證經過將建立並緩存與請求地址匹配的Action對象,將ActionMapping

對象、ActionForm對象、request和response做爲參數調用其execute方法。
5.  根據Action對象的execute方法返回的ActionForward對象,將請求轉發或重定向到該ActionForward

所封裝的地址。

14. 用struts +hibernate作一個增刪查改(機試)

15. Struts2.0Struts1.x有何區別。

Feature特徵 

Struts 1 Struts的一 

Struts 2 Struts

Action 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 interfaces to enable optional and custom services. 1 2 Struts的行動, 可能實施一項行動的界面,隨着其餘接口,使可選和定製服務。 Struts 2 provides a base ActionSupport class to implement commonly used interfaces. Struts2提供了相應的actionsupport一流的執行經常使用的接口。 Albeit, the Action interface is not required.雖然,這項行動的界面是不是必需的 。 Any POJO object with a execute signature can be used as an Struts 2 Action object.任何波霍對象與執行的簽名能夠被用來做爲一個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的一行動是單身,必須線程安全的,由於將只有一個實例一類來處理全部的請求採起行動。 The singleton strategy places restrictions on what can be done with Struts 1 Actions and requires extra care to develop.單身人士策略地方的限制,能夠作些什麼與Struts的一行動,並要求加倍當心發展。 Action resources must be thread-safe or synchronized.行動的資源,必須線程安全的或同步。 

Struts 2 Action objects are instantiated for each request, so 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的容器,產生許多扔離家出走的對象,每次請求,並多一個對象不施加表現罰款,或影響垃圾收集) 。 

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的空氣污染指數以來, httpservletrequesthttpservletresponse傳遞給Execute方法,當一個行動是引用。 

Struts 2 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.最常常的Servlet的背景是派表明做爲簡單的地圖,讓行動,以測試陷入孤立的境地。 Struts 2 Actions can still access the original request and response, if required. 2 Struts的行動仍然可使用原來的請求和響應,若是須要。 However, other architectural elements reduce or eliminate the need to access the HttpServetRequest or HttpServletResponse directly.不過,其餘建築元素,減小或消除須要訪問httpservetrequesthttpservletresponse直接。 

Testability測試 

A major hurdle to testing Struts 1 Actions is that the execute method exposes the Servlet API.一個主要障礙,以測試Struts的一行動是Execute方法暴露了Servlet的空氣污染指數。 A third-party extension, Struts TestCase, offers a set of mock object for Struts 1.第三黨的擴展, Strutstestcase ,提供了一套模擬對象的Struts 1 。 

Struts 2 Actions can be tested by instantiating the Action, setting properties, and invoking methods. 2 Struts的行動能夠測試實例化的行動,設置屬性,引用的方法。 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必須擴大基地,一流的。 Since  other JavaBeans cannot be used as ActionForms, developers often create redundant classes to capture input.因爲其餘的JavaBeans不能被用來做爲actionforms ,開發商經常形成多餘的班,以捕捉的投入。 DynaBeans can used as an alternative to creating conventional ActionForm classes, but, here too, developers may be redescribing existing JavaBeans. dynabeans能夠用來做爲一種替代創造常規actionform班,但這裏太,發展商可能會redescribing現有的JavaBeans 。 

Struts 2 uses Action properties as input properties, eliminating the need for a second input object. Struts2使用性能的行動做爲輸入屬性,再也不須要第二個輸入對象。 Input properties may be rich object types which may have their own properties.輸入屬性多是豐富的對象類型可能有本身的屬性。 The Action properties can be accessed from the web page via the taglibs.行動性質能夠從網頁上經過taglibs 。 Struts 2 also supports the ActionForm pattern, as well as POJO form objects and POJO Actions. Struts2還支持actionform模式,以及波霍形式,對象和波霍行動。 Rich object types, including business or domain objects, can be used as input/output objects.豐富的對象類型,其中包括商業利益或域對象,能夠被用來做爲輸入/輸出對象。 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 EL has basic object graph traversal, but relatively weak collection and indexed property support.El已基本對象圖遍歷,但相對薄弱的收集和索引財產的支持。 

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 ,但框架也支持一個更強大和靈活的語言表達所謂的對象圖形符號語言」 ( ognl ) 。 

Binding values into views有約束力的價值觀歸入意見 

Struts 1 uses the standard JSP mechanism for binding objects into the page context for access. Struts的一使用標準的JSP機制,有約束力的物體進入該網頁的背景下訪問。 

Struts 2 uses a "ValueStack" technology so that the taglibs can access values without coupling your view to the object type it is rendering. Struts2使用「 valuestack 」技術,使該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策略容許重用的意見覆蓋的類型可能有相同的屬性名稱,但不一樣的屬性類型。 

Type Conversion類型轉換 

Struts 1 ActionForm properties are usually all Strings. Struts的一actionform屬性一般是全部字符串。 Struts 1 uses Commons-Beanutils for type conversion. Struts的一用途的商品- beanutils爲類型轉換。 Converters are per-class, and not configurable per instance.轉換器每級的,而不是配置的每一個實例。 

Struts 2 uses OGNL for type conversion. Struts2使用ognl爲類型轉換。 The framework includes converters for basic and common object types and primitives.該框架包括轉換爲基本和共同的對象類型和原始。 

Validation驗證 

Struts 1 supports manual validation via a validate method on the ActionForm, or through an extension to the Commons Validator. Struts的一支持手冊審定經過驗證方法對actionform ,或經過一個擴展到商品校驗。 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. Struts2支持手冊審定經過驗證的方法和xwork的驗證框架。 The 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控制行動的執行 

Struts 1 supports separate Request Processors (lifecycles) 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的支持,創造不一樣的生命週期對每行動的基礎上經過攔截堆疊。 Custom stacks can be created and used with different Actions, as needed.自定義棧,才能創造和使用不一樣的行動,視須要。 

16. Struts/webwork 的工做機制,它有哪些標籤

Struts 2框架的大體處理流程以下:

 瀏覽器發送請求,例如請求/mypage.action、/reports/myreport.pdf等。

 核心控制器FilterDispatcher根據請求決定調用合適的Action。

 WebWork的攔截器鏈自動對請求應用通用功能,例如workflow、validation或文件上傳等功能。

 回調Action的execute方法,該execute方法先獲取用戶請求參數,而後執行某種數據庫操做,既能夠是將數據保存到數據庫,也能夠從數據庫中檢索信息。實際上,由於Action只是一個控制器,它會調用業務邏輯組件來處理用戶的請求。

 Action的execute方法處理結果信息將被輸出到瀏覽器中,能夠是HTML頁面、圖像,也能夠是PDF文檔或者其餘文檔。此時支持的視圖技術很是多,既支持JSP,也支持Velocity、FreeMarker等模板技術。

Hibernate

1. 什麼是Hibernate的併發機制?怎麼去處理併發問題?

   Hibernate併發機制:

   aHibernateSession對象是非線程安全的,對於單個請求,單個會話,單個的工做單元(即單個事務,單個線程),它一般只使用一次,

      而後就丟棄。

      若是一個Session 實例容許共享的話,那些支持併發運行的,例如Http request,session beans將會致使出現資源爭用。

      若是在Http Session中有hibernateSession的話,就可能會出現同步訪問Http Session。只要用戶足夠快的點擊瀏覽器的「刷新」

      就會致使兩個併發運行的線程使用同一個Session

   b、多個事務併發訪問同一塊資源,可能會引起第一類丟失更新,髒讀,幻讀,不可重複讀,第二類丟失更新一系列的問題。

   解決方案:設置事務隔離級別。

     Serializable:串行化。隔離級別最高

             Repeatable Read:可重複讀

             Read Committed:已提交數據讀

             Read Uncommitted:未提交數據讀。隔離級別最差

             設置鎖:樂觀鎖和悲觀鎖。

             樂觀鎖:使用版本號或時間戳來檢測更新丟失,<class>的映射中設置 optimistic-lock="all"能夠在沒有版本或者時間戳屬性映射的狀況下實現 版本檢查,此時Hibernate將比較一行記錄的每一個字段的狀態 行級悲觀鎖:Hibernate老是使用數據庫的鎖定機制,從不在內存中鎖定對象!只要爲JDBC鏈接指定一下隔 離級別,而後讓數據庫去搞定一切就夠了。類LockMode 定義了Hibernate所需的不一樣的鎖定級別:LockMode.UPGRADE,LockMode.UPGRADE_NOWAIT,LockMode.READ;

2. Hibernatespring中常出現的幾個異常

   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.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column: 

       password (should be mapped with insert="false" update="false")

       出錯緣由:password repassword同時對應數據庫表中的password一列,同時updateinsert都設爲truexml文件以下:

      <property name="password"

                          type="java.lang.String"

                          update="true"

                          insert="true"

                          access="property"

                          column="password"

                          length = "32"

                          />

                         <property name="repassword"

                          type="java.lang.String"

                          update="false"

                          insert="false"

                          access="property"

                          column="password"

                          length = "32"

                          />

       解決方法:將repasswordinsertupdate設爲false

   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.PropertyNotFoundException: Could not find a getter for ID in class 

      錯誤緣由:hibernate的映射文件中ID是大寫的,而pojo的類中id是小寫的

      解決方法:要麼將pojo類中的id改稱大寫,要麼把hibernate的映射文件中的ID改稱小寫。

3. Hibernatejdbc的聯繫

    hibernatejdbc的輕量級封裝,包括jdbc的與數據庫的鏈接(用hibernate.property的配置文件實現固然本質是封裝了jdbcforname),

    和查詢,刪除等代碼,都用面向對象的思想用代碼聯繫起來,hibernate經過hbm 配置文件把po類的字段和數據庫的字段關聯起來好比數據庫的id,

    在po類中就是pravite Long id; public Long getId() ;public setId(Long id);

    而後hql語句也是面向對象的,它的查詢語句不是查詢數據庫而是查詢類的,這些實現的魔法就是xml文件,其實hibernate=封裝的jdbc+xml文件

4. Hibernatespring的聯繫

    hibernate中的一些對象能夠給Spring來管理,Spring容器來建立hibernate中一些對象實例化。例如:SessionFactoryHibernateTemplate等。

    Hibernate原本是對數據庫的一些操做,放在DAO,Spring給業務層的方法定義了事務,業務層調用DAO層的方法,很好的將Hibernate的操做也加入到事務中來了。

5. Hibernate自帶的分頁機制是什麼?若是不使用Hibernate自帶的分頁,則採用什麼方式分頁?

    1hibernate自帶的分頁機制:得到Session對象後,從Session中得到Query對象。用Query.setFirstResult():設置要顯示的第一行數據,

       Query.setMaxResults():設置要顯示的最後一行數據。

    2、不使用hibernate自帶的分頁,可採用sql語句分頁,

       如:5:爲每頁顯示的記錄,2爲當前頁: select * top 5 from table where tabId not in (select tabId top (2-1)*5 from table);

   

6. hibernate的對象的三種持久化狀態,並給出解釋?

    不清楚hibernate的對象的三種持久化狀態,只知道hibernate對象的三種狀態,下面有介紹。

7. hibernate中一對多配置文件返回的是什麼?

    hibernate中一對多配置文件會相應的映射爲兩張表,而且它們之間的關係是一對多的。

例如:一個studentclasses表的關係 。一個學生只能是一個班的,一個班能夠有多個學生。

8. update()和saveOrUpdate()的區別?

    update()saveOrUpdate()是用來對跨SessionPO進行狀態管理的。

    update()方法操做的對象必須是持久化了的對象。也就是說,若是此對象在數據庫中不存在的話,就不能使用update()方法。

    saveOrUpdate()方法操做的對象既可使持久化了的,也可使沒有持久化的對象。若是是持久化了的對象調用saveOrUpdate()則會

    更新數據庫中的對象;若是是未持久化的對象使用此方法,save到數據庫中。

9. hibernate的三種狀態之間如何轉換

    當對象由瞬時狀態(Transient)save()時,就變成了持久化狀態。

    當咱們在Session裏存儲對象的時候,實際是在SessionMap裏存了一份,

    也就是它的緩存裏放了一份,而後,又到數據庫裏存了一份,在緩存裏這一份叫持久對象(Persistent)

    Session 一 Close()了,它的緩存也都關閉了,整個Session也就失效了,

    這個時候,這個對象變成了遊離狀態(Detached),但數據庫中仍是存在的。

    當遊離狀態(Detached)update()時,又變爲了持久狀態(Persistent)

    當持久狀態(Persistent)delete()時,又變爲了瞬時狀態(Transient),

    此時,數據庫中沒有與之對應的記錄。

10. hibernate拒絕鏈接、服務器崩潰的緣由?最少寫5

1. db沒有打開  

2. 網絡鏈接可能出了問題

3. 鏈接配置錯了

4. 驅動的driverurl是否都寫對了

5. LIB下加入相應驅動,數據鏈接代碼是否有誤

6. 數據庫配置可能有問題

7. 當前聯接太多了,服務器都有訪問人數限制的

8. 服務器的相應端口沒有開,即它不提供相應的服務

9  hibernate有哪些緩存,分別怎麼使用?

10  你對hibernate的瞭解到了一個什麼樣的程度?

11 寫出一個sql語句體現hibernate中一對多的關係

11. Hibernate介紹

Hibernate是一個開放源代碼的對象關係映射框架,它JDBC進行了很是輕量級的對象封裝,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。 Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序使用,也能夠在Servlet/JSPWeb應用中使用,最具革命意義的是,Hibernate能夠在應用EJBJ2EE架構中取代CMP完成數據持久化的重任

  Hibernate的核心接口一共有5個,分別爲:SessionSessionFactoryTransactionQueryConfiguration。這5個核心接口在任何開發中都會用到。經過這些接口,不只能夠對持久化對象進行存取,還可以進行事務控制。下面對這五個核心接口分別加以介紹。

·Session接口:Session接口負責執行被持久化對象的CRUD操做(CRUD的任務是完成與數據庫的交流,包含了不少常見的SQL語句。)。但須要注意的是Session對象是非線程安全的。同時,Hibernatesession不一樣於JSP應用中的HttpSession。這裏當使用session這個術語時,其實指的是Hibernate中的session,而之後會將HttpSesion對象稱爲用戶session

·SessionFactory接口:SessionFactroy接口負責初始化Hibernate。它充當數據存儲源的代理,並負責建立Session對象。這裏用到了工廠模式。須要注意的是SessionFactory不是輕量級的,由於通常狀況下,一個項目一般只須要一個SessionFactory就夠,當須要操做多個數據庫時,能夠爲每一個數據庫指定一個SessionFactory

·Configuration接口:Configuration接口負責配置並啓動Hibernate,建立SessionFactory對象。在Hibernate的啓動的過程當中,Configuration類的實例首先定位映射文檔位置、讀取配置,而後建立SessionFactory對象。

·Transaction接口:Transaction接口負責事務相關的操做。它是可選的,開發人員也能夠設計編寫本身的底層事務處理代碼。

·QueryCriteria接口:QueryCriteria接口負責執行各類數據庫查詢。它可使用HQL語言或SQL語句兩種表達方式。 

12. Hibernate主鍵介紹

Assigned

  Assigned方式由程序生成主鍵值,而且要在save()以前指定不然會拋出異常

  特色:主鍵的生成值徹底由用戶決定,與底層數據庫無關。用戶須要維護主鍵值,在調用session.save()以前要指定主鍵值。

Hilo

  Hilo使用高低位算法生成主鍵,高低位算法使用一個高位值和一個低位值,而後把算法獲得的兩個值拼接起來做爲數據庫中的惟一主鍵。Hilo方式須要額外的數據庫表和字段提供高位值來源。默認請況下使用的表是

  hibernate_unique_key,默認字段叫做next_hinext_hi必須有一條記錄不然會出現錯誤。

  特色:須要額外的數據庫表的支持,能保證同一個數據庫中主鍵的惟一性,但不能保證多個數據庫之間主鍵的惟一性。Hilo主鍵生成方式由Hibernate 維護,因此Hilo方式與底層數據庫無關,但不該該手動修改hi/lo算法使用的表的值,不然會引發主鍵重複的異常。

Increment

  Increment方式對主鍵值採起自動增加的方式生成新的主鍵值,但要求底層數據庫的支持Sequence。如OracleDB2等。須要在映射文件xxx.hbm.xml中加入Increment標誌符的設置。

  特色:由Hibernate自己維護,適用於全部的數據庫,不適合多進程併發更新數據庫,適合單一進程訪問數據庫。不能用於羣集環境。

Identity

  Identity當時根據底層數據庫,來支持自動增加,不一樣的數據庫用不一樣的主鍵增加方式。

  特色:與底層數據庫有關,要求數據庫支持Identity,如MySQl中是auto_increment, SQL Server 中是Identity,支持的數據庫有MySqlSQL ServerDB2SybaseHypersonicSQL。 Identity無需Hibernate和用戶的干涉,使用較爲方便,但不便於在不一樣的數據庫之間移植程序。

Sequence

  Sequence須要底層數據庫支持Sequence方式,例如Oracle數據庫等

  特色:須要底層數據庫的支持序列,支持序列的數據庫有DB2PostgreSqlQracleSAPDb等在不一樣數據庫之間移植程序,特別從支持序列的數據庫移植到不支持序列的數據庫須要修改配置文件

Native

  Native主鍵生成方式會根據不一樣的底層數據庫自動選擇IdentitySequenceHilo主鍵生成方式

  特色:根據不一樣的底層數據庫採用不一樣的主鍵生成方式。因爲Hibernate會根據底層數據庫採用不一樣的映射方式,所以便於程序移植,項目中若是用到多個數據庫時,可使用這種方式。

UUID

  UUID使用128UUID算法生成主鍵,可以保證網絡環境下的主鍵惟一性,也就可以保證在不一樣數據庫及不一樣服務器下主鍵的惟一性。

  特色;可以保證數據庫中的主鍵惟一性,生成的主鍵佔用比較多的存貯空間

Foreign GUID

  Foreign用於一對一關係中。GUID主鍵生成方式使用了一種特殊算法,保證生成主鍵的惟一性,支持SQL ServerMySQL 

13. Hibernate源碼中幾個包的做用簡要介紹

net.sf.hibernate.*  該包的類基本上都是接口類和異常類 

net.sf.hibernate.cache.*  JCS的實現類 

net.sf.hibernate.cfg.*  配置文件讀取類 

net.sf.hibernate.collection.*  Hibernate集合接口實現類,例如ListSetBag等等,Hibernate之因此要自行編寫集合接口實現類是爲了支持lazy loading 

net.sf.hibernate.connection.*  幾個數據庫鏈接池的Provider 

net.sf.hibernate.dialect.*  支持多種數據庫特性,每一個Dialect實現類表明一種數據庫,描述了該數據庫支持的數據類型和其它特色,例如是否有AutoIncrement,是否有Sequence,是否有分頁sql等等 

net.sf.hibernate.eg.*  Hibernate文檔中用到的例子 

net.sf.hibernate.engine.*  這個包的類做用比較散 

net.sf.hibernate.expression.*  HQL支持的表達式 

net.sf.hibernate.hq.*  HQL實現 

net.sf.hibernate.id.*  ID生成器 

net.sf.hibernate.impl.*  最核心的包,一些重要接口的實現類,若是SessionSessionFactoryQuery 

net.sf.hibernate.jca.*  JCA支持,把Session包裝爲支持JCA的接口實現類

net.sf.hibernate.jmx.*  我不懂JMX,只知道JMX是用來編寫App Server的管理程序的,大概是JMX部分接口的實現,使得App Server能夠經過JMX接口管理Hibernate 

net.sf.hibernate.loader.*  也是很核心的包,主要是生成sql語句的 

net.sf.hibernate.lob.*  BlobClob支持 

net.sf.hibernate.mapping.*  hbm文件的屬性實現 

net.sf.hibernate.metadata.*  POMeta實現 

net.sf.hibernate.odmg.*  ODMG是一個ORM標準,這個包是ODMG標準的實現類 

net.sf.hibernate.persister.*  核心包,實現持久對象和表之間的映射 

net.sf.hibernate.proxy.*  ProxyLazy Loading支持 

net.sf.hibernate.ps.*  該包是PreparedStatment Cache 

net.sf.hibernate.sql.*  生成JDBC sql語句的包 

net.sf.hibernate.test.*  測試類,你能夠用junit來測試Hibernate 

net.sf.hibernate.tool.hbm2ddl.*  用hbm配置文件生成DDL 

net.sf.hibernate.transaction.*  Hibernate Transaction實現類 

net.sf.hibernate.type.*  Hibernate中定義的持久對象的屬性的數據類型 

net.sf.hibernate.util.*  一些工具類,做用比較散 

net.sf.hibernate.xml.*  XML數據綁定 

14. 緩存管理

  Hibernate 中提供了兩級Cache第一級別的緩存是Session級別的緩存,它是屬於事務範圍的緩存。這一級別的緩存由hibernate管理的,通常狀況下無需進行干預第二級別的緩存是SessionFactory級別的緩存,它是屬於進程範圍或羣集範圍的緩存。這一級別的緩存能夠進行配置和更改,而且能夠動態加載和卸載。 Hibernate還爲查詢結果提供了一個查詢緩存,它依賴於第二級緩存。

  1. 一級緩存和二級緩存的比較:第一級緩存 第二級緩存 存放數據的形式 相互關聯的持久化對象 對象的散裝數據 緩存的範圍 事務範圍,每一個事務都有單獨的第一級緩存進程範圍或集羣範圍,緩存被同一個進程或集羣範圍內的全部事務共享 併發訪問策略因爲每一個事務都擁有單獨的第一級緩存,不會出現併發問題,無需提供併發訪問策略因爲多個事務會同時訪問第二級緩存中相同數據,所以必須提供適當的併發訪問策略,來保證特定的事務隔離級別 數據過時策略沒有提供數據過時策略。處於一級緩存中的對象永遠不會過時,除非應用程序顯式清空緩存或者清除特定的對象必須提供數據過時策略,如基於內存的緩存中的對象的最大數目,容許對象處於緩存中的最長時間,以及容許對象處於緩存中的最長空閒時間 物理存儲介質內存內存和硬盤。對象的散裝數據首先存放在基於內在的緩存中,當內存中對象的數目達到數據過時策略中指定上限時,就會把其他的對象寫入基於硬盤的緩存中。緩存的軟件實現 在HibernateSession的實現中包含了緩存的實現由第三方提供,Hibernate僅提供了緩存適配器(CacheProvider)。用於把特定的緩存插件集成到Hibernate中。啓用緩存的方式只要應用程序經過Session接口來執行保存、更新、刪除、加載和查詢數據庫數據的操做,Hibernate就會啓用第一級緩存,把數據庫中的數據以對象的形式拷貝到緩存中,對於批量更新和批量刪除操做,若是不但願啓用第一級緩存,能夠繞過Hibernate API,直接經過JDBCAPI來執行指操做。用戶能夠在單個類或類的單個集合的粒度上配置第二級緩存。若是類的實例被常常讀但不多被修改,就能夠考慮使用第二級緩存。只有爲某個類或集合配置了第二級緩存,Hibernate在運行時纔會把它的實例加入到第二級緩存中。 用戶管理緩存的方式第一級緩存的物理介質爲內存,因爲內存容量有限,必須經過恰當的檢索策略和檢索方式來限制加載對象的數目Sessionevit()方法能夠顯式清空緩存中特定對象,但這種方法不值得推薦。 第二級緩存的物理介質能夠是內存和硬盤所以第二級緩存能夠存放大量的數據,數據過時策略的maxElementsInMemory屬性值能夠控制內存中的對象數目。管理第二級緩存主要包括兩個方面:選擇須要使用第二級緩存的持久類,設置合適的併發訪問策略:選擇緩存適配器,設置合適的數據過時策略

  2. 一級緩存的管理: 當應用程序調用Sessionsave()update()savaeOrUpdate()get()load(),以及調用查詢接口的 list()iterate()filter()方法時,若是在Session緩存中還不存在相應的對象,Hibernate就會把該對象加入到第一級緩存中。當清理緩存時,Hibernate會根據緩存中對象的狀態變化來同步更新數據庫。 Session爲應用程序提供了兩個管理緩存的方法: evict(Object obj):從緩存中清除參數指定的持久化對象。 clear():清空緩存中全部持久化對象

  3. 二級緩存的管理:

  3.1. Hibernate的二級緩存策略的通常過程以下:

  1) 條件查詢的時候,老是發出一條select * from table_name where …. (選擇全部字段)這樣的SQL語句查詢數據庫,一次得到全部的數據對象。

  2) 把得到的全部數據對象根據ID放入到第二級緩存中。

  3) Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,若是配置了二級緩存,那麼從二級緩存中查;查不到,再查詢數據庫,把結果按照ID放入到緩存。

  4) 刪除、更新、增長數據的時候,同時更新緩存。 

  Hibernate二級緩存策略,是針對於ID查詢的緩存策略,對於條件查詢則毫無做用。爲此,Hibernate提供了針對條件查詢的Query Cache

3.2. 什麼樣的數據適合存放到第二級緩存中? 不多被修改的數據 不是很重要的數據,容許出現偶爾併發的數據 不會被併發訪問的數據 參考數據,指的是供應用參考的常量數據,它的實例數目有限,它的實例會被許多其餘類的實例引用,實例極少或者歷來不會被修改。

  3.3. 不適合存放到第二級緩存的數據? 常常被修改的數據 財務數據,絕對不容許出現併發 與其餘應用共享的數據。

  3.4. 經常使用的緩存插件 Hibernater 的二級緩存是一個插件,下面是幾種經常使用的緩存插件:

  EhCache:可做爲進程範圍的緩存,存放數據的物理介質能夠是內存或硬盤,對Hibernate的查詢緩存提供了支持。

  OSCache:可做爲進程範圍的緩存,存放數據的物理介質能夠是內存或硬盤,提供了豐富的緩存數據過時策略,對Hibernate的查詢緩存提供了支持。

  SwarmCache:可做爲羣集範圍內的緩存,但不支持Hibernate的查詢緩存。

  JBossCache:可做爲羣集範圍內的緩存,支持事務型併發訪問策略,對Hibernate的查詢緩存提供了支持。

  3.5. 配置二級緩存的主要步驟:

  1) 選擇須要使用二級緩存的持久化類,設置它的命名緩存的併發訪問策略。這是最值得認真考慮的步驟。

  2) 選擇合適的緩存插件,而後編輯該插件的配置文件。

Spring

1. 你通常用spring作什麼?

控制反轉IOC  AOP

2. spring中的哪一個類的哪一個方法可用於獲取bean

3. spring是什麼?根據你的理解詳細談談你的看法。

目的:解決企業應用開發的複雜性

功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能

範圍:任何Java應用

  簡單來講,Spring是一個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器框架。

輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架能夠在一個大小隻有1MB多的JAR文件裏發佈。而且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴於Spring的特定類。 

控制反轉——Spring經過一種稱做控制反轉(IoC)的技術促進了鬆耦合。當應用了IoC,一個對象依賴的其它對象會經過被動的方式傳遞進來,而不是這個對象本身建立或者查找依賴對象。你能夠認爲IoCJNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。

面向切面——Spring提供了面向切面編程的豐富支持,容許經過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務()管理)進行內聚性的開發。應用對象只實現它們應該作的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支持。 

容器——Spring包含並管理應用對象的配置和生命週期,在這個意義上它是一種容器,你能夠配置你的每一個bean如何被建立——基於一個可配置原型(prototype),你的bean能夠建立一個單獨的實例或者每次須要時都生成一個新的實例——以及它們是如何相互關聯的。然而,Spring不該該被混同於傳統的重量級的EJB容器,它們常常是龐大與笨重的,難以使用。 

框架——Spring能夠將簡單的組件配置、組合成爲複雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件裏。Spring也提供了不少基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。 

  全部Spring的這些特徵使你可以編寫更乾淨、更可管理、而且更易於測試的代碼。它們也爲Spring中的各類模塊提供了基礎支持。 

4. 項目中如何體現Spring中的切面編程,距離說明。

   面向切面編程:主要是橫切一個關注點,將一個關注點模塊化成一個切面。在切面上聲明一個通知(Advice)和切入點(Pointcut); 通知是指在切面的某個特定的鏈接點(表明一個方法的執行。經過聲明一個org.aspectj.lang.JoinPoint類型的參數可使通知(Advice)的主體部分得到鏈接點信息。)上執行的動做。通知中定義了要插入的方法。切入點:切入點的內容是一個表達式,以描述須要在哪些對象的哪些方法上插入通知中定義的方法。

   項目中用到的Spring中的切面編程最多的地方:聲明式事務管理。

   a、定義一個事務管理器

   b、配置事務特性(至關於聲明通知。通常在業務層的類的一些方法上定義事務)

   c、配置哪些類的哪些方法須要配置事務(至關於切入點。通常是業務類的方法上)

   

5. spring中能夠用注入得到屬性值,還有其餘的方式嗎?

讀取配置文件 

6. spring在項目中如何充當粘合劑

    1、在項目中利用springIOC(控制反轉或依賴注入),明確地定義組件接口(UserDAO),開發者能夠獨立開發各個組件而後根據組件間的依賴關係組裝(UserAction依賴於UserBiz,UserBiz依賴於UserDAO)運行,很好的把Struts(Action)hibernate(DAO的實現)結合起來了。

    2spring的事務管理把hibernate對數據庫的操做進行了事務配置。

7. spring的事務如何配置

    spring的聲明式事務配置:

    1. <!-- 配置sessionFactory -->

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="configLocation">

<value>/WEB-INF/classes/hibernate.cfg.xml</value>

</property>

</bean>  

    2. 配置事務管理器

       <!-- 配置事務管理器 -->

<bean id="transactionManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory">

<ref local="sessionFactory" />

</property>

</bean>

    3. 配置事務特性

       <tx:advice id="txAdvice"  transaction-manager="transactionManager">

<tx:attributes>

             <tx:method name="add*" propagation="REQUIRED"/>

                    <tx:method name="update*" propagation="REQUIRED"/>

                    <tx:method name="del*" propagation="REQUIRED"/>

                    <tx:method name="*" read-only="true"/>

                </tx:attributes>

       </tx:advice>

    4. 配置哪些類的哪些方法配置事務

       <aop:config>

           <aop:pointcut id="allManagerMethod" ession="execution(* com.yyaccp.service.impl.*.*(..))"/>

           <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod">

       </aop:config>

isolation設定事務的隔離級別,事務管理器根據它來控制另一個事務能夠看到本事務內的哪些數據。 
定義的5個不一樣的事務隔離級別: 
DEFAULT:默認的隔離級別,使用數據庫默認的事務隔離級別 
READ_COMMITTED:保證一個事務修改的數據提交後才能被另一個事務讀取。另一個事務不能讀取該事務未提交的數據。這種事務隔離級別能夠避免髒讀出現,可是可能會出現不可重複讀和幻像讀。 
READ_UNCOMMITTED:這是事務最低的隔離級別,它充許別外一個事務能夠看到這個事務未提交的數據。這種隔離級別會產生髒讀,不可重複讀和幻像讀。 
REPEATABLE_READ:這種事務隔離級別能夠防止髒讀,不可重複讀。可是可能出現幻像讀。它除了保證一個事務不能讀取另外一個事務未提交的數據外,還保證了避免不可重複讀。 
SERIALIZABLE:這是花費最高代價可是最可靠的事務隔離級別。事務被處理爲順序執行。除了防止髒讀,不可重複讀外,還避免了幻像讀。

propagation定義了7個事務傳播行爲 
REQUIRED: 若是存在一個事務,則支持當前事務。若是沒有事務則開啓一個新的事務。 
SUPPORTS: 若是存在一個事務,支持當前事務。若是沒有事務,則非事務的執行。可是對於事務同步的事務管理器,SUPPORTS與不使用事務有少量不一樣。 
REQUIRES_NEW 老是開啓一個新的事務。若是一個事務已經存在,則將這個存在的事務掛起。 
NOT_SUPPORTED 老是非事務地執行,並掛起任何存在的事務。 
NEVER 老是非事務地執行,若是存在一個活動事務,則拋出異常 
NESTED:若是一個活動的事務存在,則運行在一個嵌套的事務中. 若是沒有活動事務, 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執行。 
嵌套事務一個很是重要的概念就是內層事務依賴於外層事務。外層事務失敗時,會回滾內層事務所作的動做。而內層事務操做失敗並不會引發外層事務的回滾。

REQUIRED應該是咱們首先的事務傳播行爲。它可以知足咱們大多數的事務需求。

8. transaction有那幾種實現(事務處理)(Spring)

   在Spring中,事務處理主要有兩種方式

(1) 代碼控制事務  

在程序中引入新的模版類,這個類封裝了事務管理的功能 

(2) 參數配置控制事務,Application-Context.xml增長一個事務代理(UserDAOProxy)配置

2. IBATIS中的事物屬性怎麼配置

SQL MAP XML配置文件中的transactionManager

相關文章
相關標籤/搜索