-
Hibernate運作原理及為什麼要用?
原理:
1.讀取並解析設定檔
2.讀取並解析映射訊息,創建SessionFactory
3.開啟Sesssion
4.建立事務Transation
5.持久化操作
6.提交事務
7.關閉Session
8.關閉SesstionFactory
為什麼要用:
1. 對JDBC存取資料庫的程式碼做了封裝,大大簡化了資料存取層繁瑣的重複性程式碼。
2. Hibernate是一個基於JDBC的主流持久化框架,是優秀的ORM實作。他很大程度的簡化DAO層的編碼工作
3. hibernate使用Java反射機制,而不是字節碼增強程式來實現透明性。
4. hibernate的效能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支援各種關係資料庫,從一對一到多對多的各種複雜關係。
2. Hibernate是如何延遲載入?
1. Hibernate2延遲載入實作:a)實體物件b)集合(Collection)
2. Hibernate3 提供了屬性的延遲載入功能
當Hibernate在查詢資料的時候,資料並沒有存在與記憶體中,當程式真正對資料的操作時,物件才存在與記憶體中,就實現了延遲加載,他節省了伺服器的記憶體開銷,從而提高了伺服器的性能。
3. Hibernate中怎樣實現類別之間的關係?(如:一對多、多對多的關係)
類別與類別之間的關係主要體現在表與表之間的關係進行操作,它們都會對物件進行操作,我們程式中把所有的表與類別都映射在一起,它們透過設定檔中的many-to -one、one-to-many、many-to-many、
4. 說下Hibernate的快取機制
1. 內部快取存在Hibernate中又叫一級緩存,屬於應用事物級緩存
2. 二級緩存:
a) 應用及快取
b) 分散式快取條件:資料不會被第三方修改、資料大小在可接受範圍、資料更新頻率低、同一資料被系統頻繁使用、非關鍵數據
c) 第三方快取的實現
5. Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:
1、 屬性查詢
2、 參數查詢、命名參數查詢
3、 關聯查詢
4、 分頁查詢
5、 統計函數
6. 如何優化Hibernate?
1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一取代
4.配置物件緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類別使用顯式多型
7. 表格字段要少,表格關聯不要怕多,有二級緩存撐腰
7. Struts工作機制?為什麼要使用Struts?
工作機制:
Struts的工作流程:
在web應用程式啟動時就會載入初始化ActionServlet,ActionServlet從
struts-config.xml檔中讀取設定資訊,把它們存放到各種設定物件當ActionServlet接收到一個客戶請求時,將執行下列流程.
-(1)擷取與使用者要求符合的ActionMapping實例,如果不存在,就傳回請求路徑無效資訊;
-(2)如果ActionForm實例不存在,就建立一個ActionForm物件,把客戶提交的表單資料儲存到ActionForm物件中;
-(3)根據設定資訊決定是否需要表單驗證.如果需要驗證,就呼叫ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法傳回null或傳回一個不包含ActionMessage的ActuibErrors物件, 就表示表單驗證成功;
-(5)ActionServlet根據ActionMapping包含的映射資訊決定將請求轉發給哪個Action,如果對應的Action實例不存在,就先創建這個實例,然後調用Action的execute()方法;
-(6)Action的execute()方法傳回一個ActionForward物件,ActionServlet在把客戶請求轉送給ActionForward物件指向的JSP元件;
-(7)ActionForward物件指向JSP元件產生動態網頁,傳回給客戶;
為什麼要用:
JSP、Servlet、JavaBean技術的出現為我們建立強大的企業應用系統提供了可能。但用這些技術建構的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生。
基於Struts開發的應用由3類元件構成:控制器元件、模型元件、視圖元件
8. Struts的validate框架是如何驗證的?
在struts設定檔中配置具體的錯誤提示,再在FormBean中的validate()方法具體呼叫。
9. 說下Struts的設計模式
MVC模式: web應用程式啟動時就會載入並初始化ActionServler。當使用者提交表單時,一個配置好的ActionForm物件被創建,並填入表單對應的數據,ActionServler根據Struts-config.xml檔案配置好的設定決定是否需要表單驗證,如果需要就呼叫ActionForm的Validate()驗證後選擇將要求傳送到哪個Action,如果Action不存在,ActionServlet會先建立這個對象,然後呼叫Action的execute()方法。 Execute()從ActionForm物件取得數據,完成業務邏輯,傳回一個ActionForward對象,ActionServlet再把客戶要求轉送給ActionForward物件指定的jsp元件,ActionForward物件指定的jsp產生動態的網頁,傳回給客戶。
10. spring工作機制及為何要用?
1.spring mvc請所有的請求都提交給DispatcherServlet,它會委託應用系統的其他模組負責負責對請求進行真正的處理工作。
2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理後,會回傳一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView物件指定的視圖對象
6.視圖物件負責渲染回傳給客戶端。
為什麼用:
{AOP 讓開發人員可以創建非行為性的關注點,稱為橫切關注點,並將它們插入到應用程式程式碼中。使用AOP 後,公共服務(例如日誌、持久性、交易等)就可以分解成方面並應用到域物件上,同時不會增加域物件的物件模型的複雜度。
IOC 允許建立一個可以建構物件的應用環境,然後向這些物件傳遞它們的協作物件。正如單字倒置所表明的,IOC 就像反過來的JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個物件都是用其協作物件建構的。因此是由容器管理協作物件(collaborator)。
Spring即使一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換物件。有了Spring,只要用JavaBean 屬性和設定檔加入依賴性(協作物件)。然後可以輕鬆地在需要時替換具有類似介面的協作物件。 }
Spring 框架是一個分層架構,由7 個定義良好的模組組成。 Spring 模組建構在核心容器之上,核心容器定義了建立、配置和管理bean 的方式,如圖1 所示。
組成Spring 框架的每個模組(或組件)都可以單獨存在,或與其他一個或多個模組聯合實作。每個模組的功能如下:
☆ 核心容器:核心容器提供Spring 框架的基本功能。核心容器的主要元件是BeanFactory,它是工廠模式的實作。 BeanFactory 使用控制反轉(IOC) 模式將應用程式的配置和依賴性規範與實際的應用程式程式碼分開。
☆ Spring 上下文:Spring 上下文是一個配置文件,向Spring 框架提供上下文資訊。 Spring 情境包含企業服務,例如JNDI、EJB、電子郵件、國際化、校驗和排程功能。
☆ Spring AOP:透過配置管理特性,Spring AOP 模組直接將面向方面的程式功能整合到了Spring 框架中。所以,可以很容易地讓Spring 框架管理的任何物件支援AOP。 Spring AOP 模組為基於Spring 的應用程式中的物件提供了事務管理服務。透過使用Spring AOP,不用依賴EJB 元件,就可以將聲明性事務管理整合到應用程式中。
☆ Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商拋出的錯誤訊息。異常層次結構簡化了錯誤處理,並且大大降低了需要編寫的異常程式碼數量(例如開啟和關閉連線)。 Spring DAO 的面向JDBC 的異常遵從通用的DAO 異常層次結構。
☆ Spring ORM:Spring 框架插入了若干個ORM 框架,從而提供了ORM 的物件關係工具,其中包括JDO、Hibernate 和iBatis SQL Map。所有這些都遵從Spring 的通用事務和DAO 異常層次結構。
☆ Spring Web 模組:Web 上下文模組建立在應用程式上下文模組之上,為基於Web 的應用程式提供了上下文。所以,Spring 框架支援與Jakarta Struts 的整合。 Web 模組也簡化了處理多部分請求以及將請求參數綁定到網域物件的工作。
☆ Spring MVC 框架:MVC 框架是一個全功能的建構Web 應用程式的MVC 實作。透過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括JSP、Velocity、Tiles、iText 和POI。
Spring 框架的功能可以用在任何J2EE 伺服器中,大多數功能也適用於不受管理的環境。 Spring 的核心重點是:支援不綁定到特定J2EE 服務的可重複使用業務和資料存取物件。毫無疑問,這樣的物件可以在不同J2EE 環境(Web 或EJB)、獨立應用程式、測試環境之間重複使用。
IOC 和AOP
控制反轉模式(也稱為依賴性介入)的基本概念是:不創建對象,但是描述創建它們的方式。在程式碼中不直接與物件和服務連接,但在設定檔中描述哪一個元件需要哪一項服務。容器(在Spring 框架中是IOC 容器) 負責將這些連結在一起。
在典型的IOC 場景中,容器創建了所有對象,並設定必要的屬性將它們連接在一起,決定什麼時間呼叫方法。下表列出了IOC 的一個實作模式。
Spring 框架的IOC 容器採用類型2 和類型3 實作。
面向方面的程式設計
面向方面的編程,即AOP,是一種編程技術,它允許程式設計師對橫切關注點或橫切典型的職責分界線的行為(例如日誌和事務管理)進行模組化。 AOP 的核心構造是方面,它將那些影響多個類別的行為封裝到可重複使用的模組中。
AOP 和IOC 是補充性的技術,它們都運用模組化方式解決企業應用程式開發中的複雜問題。在典型的物件導向開發方式中,可能要將日誌記錄語句放在所有方法和Java 類別中才能實作日誌功能。在AOP 方式中,可以反過來將日誌服務模組化,並以聲明的方式將它們應用到需要日誌的元件上。當然,優勢就是Java 類別不需要知道日誌服務的存在,也不需要考慮相關的程式碼。所以,用Spring AOP 寫的應用程式程式碼是鬆散耦合的。
AOP 的功能完全整合到了Spring 事務管理、日誌和其他各種特性的上下文中。
IOC 容器
Spring 設計的核心是org.springframework.beans 套件,它的設計目標是與JavaBean 元件一起使用。這個包通常不是由使用者直接使用,而是由伺服器將其用作其他多數功能的底層中介。下一個最高級抽像是BeanFactory 接口,它是工廠設計模式的實現,允許透過名稱建立和檢索物件。 BeanFactory 也可以管理物件之間的關係。
BeanFactory 支援兩個物件模型。
□ 單態模型提供了具有特定名稱的物件的共用實例,可以在查詢時進行檢索。 Singleton 是預設的也是最常用的物件模型。對於無狀態服務對像很理想。
□ 原型模型確保每次檢索都會建立單獨的物件。當每個使用者都需要自己的物件時,原型模型最適合。
bean 工廠的概念是Spring 作為IOC 容器的基礎。 IOC 將處理事情的責任從應用程式程式碼轉移到框架。正如我將在下一個範例中示範的那樣,Spring 框架使用JavaBean 屬性和配置資料來指出必須設定的依賴關係。
BeanFactory 介面
因為org.springframework.beans.factory.BeanFactory 是一個簡單接口,所以可以針對各種底層儲存方法實作。最常用的BeanFactory 定義是XmlBeanFactory,它會根據XML 檔案中的定義裝入bean,如清單1 所示。
清單1. XmlBeanFactory
BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));
在XML 檔案中定義的Bean 是被消極載入的,這意味著在需要bean 之前,bean 本身不會被初始化。要從BeanFactory 檢索bean,只需呼叫getBean() 方法,傳入將要檢索的bean 的名稱即可,如清單2 所示。
清單2. getBean()
MyBean mybean = (MyBean) factory.getBean("mybean");
每個bean 的定義都可以是POJO (以類別名稱和JavaBean 初始化屬性定義) 或FactoryBean。 FactoryBean 介面為使用Spring 框架建立的應用程式新增了一個間接的層級。
IOC 範例
理解控制反轉最簡單的方式就是看它的實際應用。在對由三部分組成的Spring 系列的第1 部分進行總結時,我使用了一個範例,示範如何透過Spring IOC 容器注入應用程式的依賴關係(而不是將它們建置進來)。
我使用開啟線上信用帳戶的用例作為起點。對於該實現,開啟信用帳戶要求使用者與以下服務互動:
☆ 信用等級評定服務,查詢使用者的信用歷史資料。
☆ 遠端資訊連結服務,插入客戶訊息,將客戶資訊與信用卡和銀行資訊連接起來,以進行自動扣款(如果需要的話)。
☆ 電子郵件服務,傳送有關信用卡狀態的電子郵件給使用者。
三個介面
對於這個範例,我假設服務已經存在,理想的情況是用鬆散耦合的方式把它們整合在一起。以下清單顯示了三個服務的應用程式介面。
清單3. CreditRatingInterface
public interface CreditRatingInterface {
public boolean getUserCreditHistoryInformation(ICustomer iCustomer);
}
清單3 所示的信用等級評定介面提供了信用歷史資訊。它需要一個包含客戶資訊的Customer 物件。此介面的實作是由CreditRating 類別提供的。
清單4. CreditLinkingInterface
public interface CreditLinkingInterface {
public String getUrl();
public void setUrl(String url);
public void linkCreditBankAccount() throws Exception ;
}
信用連結介面將信用歷史資訊與銀行資訊(如果需要的話)連接在一起,並插入用戶的信用卡資訊。信用連結介面是一個遠端服務,它的查詢是透過getUrl() 方法進行的。 URL 由Spring 框架的bean 配置機制設置,我稍後會討論它。此介面的實作是由CreditLinking 類別提供的。
清單5. EmailInterface
public interface EmailInterface {
public void sendEmail(ICustomer iCustomer);
public String getFromEmail();
public void setFromEmail(String fromEmail) ;
public String getPassword();
public void setPassword(String password) ;
public String getSmtpHost() ;
public void setSmtpHost(String smtpHost);
public String getUserId() ;
public void setUserId(String userId);
本文出自CSDN博客,轉載請標示出處: http://blog.csdn.net/loshu2003/archive/2009/12/31/5111344.aspx
-