Hibernate-chapter one

来源:http://www.cnblogs.com/lznmxqdgj/archive/2016/12/26/6223789.html
-Advertisement-
Play Games

什麼是Hibernate??? Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與資料庫表建立映射關係,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程式員可以隨心所欲的使用對象編程思維來操縱資料庫 ...


 

======什麼是Hibernate???======

Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與資料庫表建立映射關係,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執行,使得Java程式員可以隨心所欲的使用對象編程思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。——《百度百科》

1.Hibernate 是一個開源框架,與 Struts 這種 MVC(Model-View-Controller) 框架不同的是,Hibernate 是一種 ORM(Object/Relational Mapping) 框架。

2.ORM 意為對象關係映射,因此 Hibernate 會在 Java 對象和關係資料庫之間建立某種映射,以達到存取 Java 對象的目的,是實現持久化存儲(將記憶體中的數據存儲在關係型的資料庫、磁碟文件、XML數據文件中等等)的一種解決方案。

*******************普及一下ORM**************************************

  -ORM(Object/Relation Mapping):對象/關係映射

       *ORM主要解決對象~關係的映射

       *ORM的思想:將關係資料庫中的記錄映射成為對象,以對象的形式展示,程式員可以把對資料庫的操作轉化為對對象的操作。

       *ORM採用元數據來描述對象~關係映射細節,元數據通常採用XML格式,並且放在專門的對象~關係映射文件中。

3.Hibernate 不僅管理 Java 類到資料庫表的映射(包括從 Java 數據類型到 SQL 數據類型的映射),還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人工使用 SQL 和 JDBC 處理數據的時間。這正是它的設計目標,即將軟體開發人員從大量相同的數據持久層相關編程工作中解放出來。

 ======Hibernate體繫結構======

~簡要的 Hibernate 整體體繫結構大致圖~

從上圖可以看出,Hibernate 使用資料庫(Database)和配置信息(hibernate.properties 等)來為應用程式提供持久化服務(以及持久的對象 Persistent Objects)。

我們再來看看 Hibernate 運行時的體繫結構。由於Hibernate非常靈活,且支持多種應用方案, 所以這裡我們只描述一下兩種極端的情況。

  • “輕型”的體繫結構方案

要求應用程式提供自己的 JDBC 連接並管理自己的事務。這種方案使用了 Hibernate API 的最小子集:

  • “全面解決”的體繫結構方案

將應用層從底層的 JDBC/JTA API 中抽象出來,而讓 Hibernate 來處理這些細節:

======基本 APIs=======

  • SessionFactory

    (org.hibernate.SessionFactory)

對於單個資料庫映射關係經過編譯後的記憶體緩存,它是線程安全且不可變的。是 Session 生成的工廠實例,也是 ConnectionProvider 的一個客戶端(會用到 ConnectionProvider)。它在進程或集群的級別上,為那些在事務之前可重覆使用的數據提供了選擇性的二級緩存。

  • Session(org.hibernate.Session)

提供應用程式和持久化存儲介質之間的一個單線程的會話對象,此對象生存期很短。它隱藏了 JDBC 連接,也是 Transaction 的工廠實例。對於應用的持久化對象及其集合,它提供了一個一級緩存;當遍歷導航對象圖或者根據持久化標識查找對象時,會用到這個一級緩存。

  • 持久化的對象及其集合

具有持久化狀態和業務功能的單線程對象,同樣生存期很短。這些對象可能是普通的 JavaBeans/POJOs(Plain Ordinary Java Object),它們只能與一個 Session 相關聯。一旦 Session 被關閉,它們就會脫離持久化狀態,並且可以被應用程式的任何層使用(比如跟表示層打交道的 data transfer objects)

  • 瞬態(transient)、脫管

    狀態(detached)的對象及其集合

持久化的類目前沒有和 Session 相關聯的實例。他們可能是因為在被應用實例化後還沒有被持久化,也可能是由於實例化它們的 Session 對象已經被關閉,從而脫離了持久化狀態。

  • 事務(Transaction)

    (org.hibernate.Transaction)

(可選的)它是應用程式用來指定原子操作單元範圍的對象,是一個單線程的、短生存周期的對象。它使用抽象把應用從底層的 JDBC、JTA 以及 CORBA 事務中隔離開。在某些情況下,一個 Session 可能涵蓋多個 Transactions 對象。儘管使用該對象是可選的,但事務的劃分(無論是使用底層的 API 還是使用 Transaction 對象)都是不可選的。

  • ConnectionProvider

    (org.hibernate.connection.ConnectionProvider)

(可選的)JDBC 連接的工廠和連接池。它通過抽象把應用從底層的 DataSource 或者 DriverManager 隔離開。這並不開放給應用程式使用,但對開發者而言是可以擴展或實現的。

  • TransactionFactory

    (org.hibernate.TransactionFactory)

(可選的)生成 Transaction 對象實例的工廠。僅供開發者擴展/實現用,並不開放給應用程式使用。

  • 擴展介面(Extension Interfaces)

Hibernate 提供了很多可選的擴展介面,你可以通過實現它們來定製你的持久層的行為。

======Hibernate優點======

a、封裝了jdbc,簡化了很多重覆性代碼。

b、簡化了DAO層編碼工作,使開發更對象化了。

c、移植性好,支持各種資料庫,如果換個資料庫只要在配置文件中變換配置就可以了,不用改變hibernate代碼。

d、支持透明持久化,因為hibernate操作的是純粹的(pojo)java類,沒有實現任何介面,沒有侵入性。所以說它是一個輕量級框架。

e、它支持各種關係資料庫,從 一對一 到 多對多 的各種複雜關係。

 

--------------------------------------------------------------------------------------------------------------------------------------來自尼瑪星球的光軍/QQ:383996901


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目的: 使用垃圾回收器的唯一原因就是:回收程式不再使用的記憶體。 針對的目標對象: Java的垃圾回收器會自動回收不再使用的Java對象,釋放記憶體。但是回收的是用new創建的,分配在堆上的記憶體。 finalize(): 那麼,如果不是用這種方式創建的對象,該怎麼回收?比如:Java調用了本地的c語言方 ...
  • 今天在看別人代碼時看到這樣一種寫法, 感覺是個挺容易踩到的坑, 搞清楚後寫出來備忘. 短路邏輯 Python中進行邏輯運算的時候, 預設採用的是一種叫做短路邏輯的運算規則. 名字是很形象的, 下麵直接看代碼 可以看到, 雖然1會被當做布爾值計算, 但整個表達式的計算結果卻不一定是布爾值, 而是根據表 ...
  • 現在的資料庫越來越多,如mgdb,我比較常用的是mysql,但有一天做項目需要連接SqlServer,就去找了個方法。找了很多無非就mssql模塊和node-sqlserver模塊,但node-sqlserver好像有很多限制和還要編譯,感覺很麻煩,就用了mssql模塊。mssql模塊還是很簡單的, ...
  • 一般的智能指針都是通過一個普通指針來初始化,所以很容易寫出以下的代碼: #include using namespace std; int func1(){ //返回一個整數的函數 } void func2(AutoPtr ptr,int t){ //一些操作 } int ... ...
  • (1)、編寫配置文件 Hibernate通過讀寫預設的XML配置文件hibernate.cfg.xml載入資料庫配置信息、代碼如下: (2)、編寫持久化類 持久化類是Hibernate操作的對象、它與資料庫中的數據表相對應 (3)、編寫映射文件 (4)、編寫Hibernate的工具類 ...
  • 下期預告,函數... ...
  • 題目大意:給定一個長度為n的整數序列x[i],確定一個二元組(b, k)使得S=Σ(k*i+b- x[i])^2(i∈[0,n-1])最小 看Claris大神的題解就行了。實際上就是用2次二次函數的性質。 http://www.cnblogs.com/clrs97/p/4703437.html 代碼 ...
  • 轉載http://blog.csdn.net/Shayabean_/article/details/44885917博客 先說說基數排序的思想: 基數排序是非比較型的排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。 將所有待比較數值(正整數)統一為同樣的數位長度,數位較短的數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...