Hibernate入門前的一些基本知識概念

因爲最近需要負責一個項目的後臺維護工作,使用的是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對象被用於創造和執行面向規則查詢的對象來檢索對象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章