Java主流開發框架
Spring框架
Spring框架是一個分層架構,由7個定義良好的模組組成。Spring框架構建在核心容器之上,核心容器定義了建立、配置和管理bean的方式,如下圖所示:
組成Spring框架的每個模組(或元件)都可以單獨存在,或者與其他一個或對個模組聯合實現。每個模組的功能如下:
- 核心容器(Spring Core):核心容器提供Spring框架的基本功能。核心容器的主要元件是BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程式的配置和依賴性規範與實際的應用程式程式碼分開。
- Spring 上下文(Spring Context):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)、獨立應用程式、測試環境之間重用。
控制反轉模式(也稱作依賴性介入)的基本概念是:不建立物件,但是描述建立它們的方式。在程式碼中不直接與物件和服務連線,但在配置檔案中描述哪一個元件需要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯絡在一起。
面向方面的程式設計,即 AOP,是一種程式設計技術,它允許程式設計師對橫切關注點或橫切典型的職責分界線的行為(例如日誌和事務管理)進行模組化。AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模組中。AOP 的功能完全整合到了 Spring 事務管理、日誌和其他各種特性的上下文中。
BeanFactory 支援兩個物件模型。
- 單態 模型提供了具有特定名稱的物件的共享例項,可以在查詢時對其進行檢索。Singleton 是預設的也是最常用的物件模型。對於無狀態服務物件很理想。
- 原型 模型確保每次檢索都會建立單獨的物件。在每個使用者都需要自己的物件時,原型模型最適合。
SpringMVC框架
MVC(Model-View-Control):Control層屬於框架部分,主要完成的工作是:封裝web請求為一個數據物件、呼叫業務邏輯層來處理資料物件、返回處理資料結構以及相應的師徒給客戶端。
SpringMVC 和 Struts2 都是表現層的框架,是 Spring 框架的一部分,Spring 框架中 Control 層的核心是DispatcherServlet,它的作用是將請求分發給不同的後端處理器。
Spring 的 Control 層框架使用了後端控制器來對映處理器和檢視解析器來共同完成 Control 層框架的主要工作。並且 spring 的 Control 層框架還真正地把業務層處理的資料結果和相應的檢視拼成一個物件,即 ModelAndView 物件。
SpringMVC框架處理流程
SpringMVC框架訪問流程
MyBatis框架
MyBatis 是支援普通 SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始對映,將介面和 Java 的POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
從MyBatis程式碼實現的角度來看,MyBatis的主要的核心部件有以下幾個:
- SqlSession 作為MyBatis工作的主要頂層API,表示和資料庫互動的會話,完成必要資料庫增刪改查功能
- Executor MyBatis執行器,是MyBatis 排程的核心,負責SQL語句的生成和查詢快取的維護
- StatementHandler 封裝了JDBC Statement操作,負責對JDBC statement 的操作,如設定引數、將Statement結果集轉換成List集合。
- ParameterHandler 負責對使用者傳遞的引數轉換成JDBC Statement 所需要的引數,
- ResultSetHandler 負責將JDBC返回的ResultSet結果集物件轉換成List型別的集合;
- TypeHandler 負責java資料型別和jdbc資料型別之間的對映和轉換
- MappedStatement MappedStatement維護了一條<select|update|delete|insert>節點的封裝,
- SqlSource 負責根據使用者傳遞的parameterObject,動態地生成SQL語句,將資訊封裝到BoundSql物件中,並返回
- BoundSql 表示動態生成的SQL語句以及相應的引數資訊
- Configuration MyBatis所有的配置資訊都維持在Configuration物件之中。
MyBatis層次結構:
Hibernate框架
JDBC 代表 Java Database Connectivity ,它是提供了一組 Java API 來訪問關係資料庫的 Java 程式。這些 Java APIs 可以使 Java 應用程式執行 SQL 語句,能夠與任何符合 SQL 規範的資料庫進行互動。
- Hibernate框架是應用在JavaEE三層結構中的dao層框架
- 使用Hibernate框架在dao層裡面做對資料庫的增刪改查操作。Hibernate框架底層是JDBC,使用Hibernate框架對JDBC輕量級的封裝,可以不需要寫複雜的JBDC程式碼
- Hibernate框架是開源的,輕量級的框架(Hibernate框架不需要依賴其他東西就可以直接使用)
Hibernate 優勢
- Hibernate 使用 XML 檔案來處理對映 Java 類別到資料庫表格中,並且不用編寫任何程式碼。
- 為在資料庫中直接儲存和檢索 Java 物件提供簡單的 APIs。
- 如果在資料庫中或任何其它表格中出現變化,那麼僅需要改變 XML 檔案屬性。
- 抽象不熟悉的 SQL 型別,併為我們提供工作中所熟悉的 Java 物件。
- Hibernate 不需要應用程式伺服器來操作。
- 操控你資料庫中物件複雜的關聯。
- 最小化與訪問資料庫的智慧提取策略。
- 提供簡單的資料詢問。
Hibernate應用程式體系結構圖
配置物件
配置物件是你在任何 Hibernate 應用程式中創造的第一個 Hibernate 物件,並且經常只在應用程式初始化期間創造。它代表了 Hibernate 所需一個配置或屬性檔案。配置物件提供了兩種基礎元件。
資料庫連線:由 Hibernate 支援的一個或多個配置檔案處理。這些檔案是 hibernate.properties 和 hibernate.cfg.xml。
類對映設定:這個元件創造了 Java 類和資料庫表格之間的聯絡。
- SessionFactory 物件:配置物件被用於創造一個 SessionFactory 物件,使用提供的配置檔案為應用程式依次配置 Hibernate,並允許例項化一個會話物件。SessionFactory 是一個執行緒安全物件並由應用程式所有的執行緒所使用。SessionFactory 是一個重量級物件所以通常它都是在應用程式啟動時創造然後留存為以後使用。每個資料庫需要一個 SessionFactory 物件使用一個單獨的配置檔案。所以如果你使用多種資料庫那麼你要創造多種 SessionFactory 物件。
- Session 物件:一個會話被用於與資料庫的物理連線。Session 物件是輕量級的,並被設計為每次例項化都需要與資料庫的互動。持久物件通過 Session 物件儲存和檢索。Session 物件不應該長時間保持開啟狀態因為它們通常情況下並非執行緒安全,並且它們應該按照所需創造和銷燬。
- Transaction 物件:一個事務代表了與資料庫工作的一個單元並且大部分 RDBMS 支援事務功能。在 Hibernate 中事務由底層事務管理器和事務(來自 JDBC 或者 JTA)處理。這是一個選擇性物件,Hibernate 應用程式可能不選擇使用這個介面,而是在自己應用程式程式碼中管理事務。
- Query 物件:Query 物件使用 SQL 或者 Hibernate 查詢語言(HQL)字串在資料庫中來檢索資料並創造物件。一個查詢的例項被用於連結查詢引數,限制由查詢返回的結果數量,並最終執行查詢。
- Criteria 物件:Criteria 物件被用於創造和執行面向規則查詢的物件來檢索物件。