Hibernate入門前的一些基本知識概念
阿新 • • 發佈:2018-12-07
因為最近需要負責一個專案的後臺維護工作,使用的是Spring+SpringMVC+Hibernate框架,因為現在主流的是SSM框架,所以筆者對於Hibernate也是很久沒有使用,所以這裡開一個帖子,簡單記錄下載學習的過程和在學的過程中遇到的一些問題,主要還是針對Hibernate,因為相信大多數的開發人員對於Spring和SpringMVC的原理和使用已經十分的熟悉,但是對於Hibernate這個有點過時的框架的熟練程度沒有那麼深.....那麼,就讓我們一起慢慢地進步和成長吧!!! 在開始學習之前,一些必要的,繁瑣的概念性的東西還是需要去了解的,這不是一個無用功的過程,這會對你瞭解這個框架的產生、優缺點以及特點有很大的幫助... **首先來了解下ORM的概念** **ORM : 物件關係對映** 在面向物件的系統中,存在一個物件模型和關係型資料庫不匹配的問題。RDBMSs用表格的形式儲存資料,然而像java或者C#這樣的面向物件的語言他表示一個物件關聯圖。 **RDBMS的特點:** 1,資料以表格的形式出現 2,每行為各種記錄的名稱 3,每列為記錄名稱所對應的資料域 4,許多的行和列組成一張表單 5,若干的表單組成database 在進行物件與資料庫進行對應的時候,實體類中的屬性與表中的欄位需要進行對應,這樣的話,問題也就隨之出現了: **問題一:** 再次修改資料庫比較麻煩 **問題二:**在關係型資料庫中載入和儲存物件時我們喲啊面臨以下五個不匹配的問題 不匹配 描述 粒度 有時候你將會有一個物件模型,該模型類的數量比資料庫中關聯的表的數量更多。 繼承 RDBMSs不會定義在任何面向物件程式語言中本來就有的繼承 身份 RDBMSs明確定義一個sameness的概念:主鍵。然而,java同時定義了物件判等(a==b)和物件值等(e.equals(b)) 關聯 面向物件的程式語言使用物件引用來表示關聯,而一個RDBMS使用外檢來表示物件關聯 導航 在java中和RDBMS中訪問物件的方式完全不同 **ORM:是一個方便在關係資料庫和類似於java,c#等面向物件的程式語言中轉換資料的技術。一個ORM系統相當於普通的jdbc有一下的優點:** 1,使用業務程式碼訪問物件而不是資料庫中的表 2,從面向物件邏輯中隱藏SQL查詢的細節 3,基於JDBC的'under the hood' 4,沒必要去處理資料庫實現 5,實體是居於業務的概念而不是資料庫的結構 6,事務管理和鍵的自動生成 7,應用程式的快速開發 **一個ORM解決方案由四個實體組成:** 1,一個API來在持久類的物件上實現基本的CRUD操作 2,一個語言或API來指定引用類和屬性的查詢 3,一個可配置的服務用來指定對映元資料 4,一個技術和事物物件互動來執行dirty checking,lazy assocition fetching和其他優化得功能 **Java ORM框架:** 在java中有幾個持久化的框架和ORM選項,一個持久化的框架是ORM儲存和索引物件到關係型資料庫的服務。 Enterprise JavaBeans Entity Beans Java Data Objects Castor TopLink Spring DAO Hibernate And many more 初識Hibernate : 開放原始碼的物件關係框架。 簡介:它強大且高效的構建具有關係物件永續性和查詢服務的java應用程式。 Hibernate將java類對映到資料庫表中,從java資料型別中對映到sql資料型別中。 Hibernate是傳統java物件和資料庫服務之間的橋樑,用來處理基於O/R對映機制和模式的那些物件。 Hibernate的優勢: Hibernate 使用 XML 檔案來處理對映 Java 類別到資料庫表格中,並且不用編寫任何程式碼。 為在資料庫中直接儲存和檢索 Java 物件提供簡單的 APIs。 如果在資料庫中或任何其它表格中出現變化,那麼僅需要改變 XML 檔案屬性。 抽象不熟悉的 SQL 型別,併為我們提供工作中所熟悉的 Java 物件。 Hibernate 不需要應用程式伺服器來操作。 操控你資料庫中物件複雜的關聯。 最小化與訪問資料庫的智慧提取策略。 提供簡單的資料詢問。 **下面是一個詳細的Hibernate應用程式體系結構檢視以及一些重要的類 :** ![這裡寫圖片描述](https://img-blog.csdn.net/20180112155044240?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvV0pIZWxsb1dvcmxk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) Hibernate使用不同的現存java api,比如JDBC,java事物api,以及java命名和目錄介面。 Hibernate支援幾乎所有帶有JDBC驅動的資料庫。JNDI和JTA允許Hibernate與J2EE應用伺服器繼承。 **配置物件:** 這是一個在任何Hibernate應用程式中創造的第一個Hibernate物件,並且經常只有在應用程式初始化的時候創造。它代表Hibernate所需要的一個配置或者屬性檔案。 配置物件提供了兩種基礎組建: 資料庫連線:由Hibernate支援的一個或多個配置檔案處理,這些檔案是Hibernate.peoperties和Hibernate.cfg.xml. 類對映設定:這個組建創造了java類和資料庫表格之間的聯絡。 **SessionFactory物件:** 配置物件被用於創造一個SessionFactory物件,使用提供的配置檔案為應用程式依次配置Hibernate,並允許例項化一個會話物件。SessionFactory是一個執行緒安全物件並由應用程式所有的執行緒所使用。 SessionFactory是一個重量級物件,所以通常他都是在應用程式啟動時創造然後留存為以後使用。每個資料庫需要一個SessionFactory物件使用一個單獨的配置檔案,所以如果你使用多種資料庫那麼你就需要建立多種SessionFactory物件。 **Session物件:** 一個會話被用於與資料庫的物理連線。session物件時輕量級的,並被設計為每次例項化都需要與資料庫的互動。持久物件通過session物件儲存和索引。 session物件不應該長時間保持開啟狀態因為他們通常情況下並非是執行緒安全的,並且他們應該按照所需創造和銷燬。 **Transaction物件:** 一個事務代表了與資料庫工作的一個單元並且大部分RDBMS支援事務功能。在Hibernate中事務由底層事務管理器和事物處理。 這是一個選擇性物件,Hibernate應用程式可能不選擇這個介面,二是在自己應用程式程式碼中管理事務。 **Query物件:** Query物件使用SQL或者Hibernate查詢語言HQL字串在資料庫中來檢索資料並創造物件。一個查詢的示例被用於連線查詢引數,限制由查詢返回的結果數量,並最終執行查詢。 **Criteria物件:** Critical物件被用於創造和執行面向規則查詢的物件來檢索物件。