hibernate4之原理淺析
阿新 • • 發佈:2019-01-27
Hibernate是一個對JDBC輕量封裝後的輕量級ORMapping框架
ORMapping原理(Object Relational Mapping)
在以前使用的JDBC操作其實就是一個持久化的過程
JDBC的劣勢:
對於小型的應用開發而言,使用JDBC也許還不錯。但是對於大型應用而言,從上百張擁有幾十個欄位的資料表中讀取資料的話,就要寫很多getXXX()方法,所以JDBC在程式碼開發環節來講有高出錯率和低複用性。
隨著Hibernate的日趨成熟,從易用性和高效性角度來講,JDBC在記錄的批量操作,多表連線,表單級聯方面表現並不優秀。
ORMapping基本對應規則:
1:類跟表相對應
2:類的屬性跟表的欄位相對應
3:類的例項與表中具體的一條記錄相對應
4:一個類可以對應多個表,一個表也可以對應對個類
5:DB中的表可以沒有主鍵,但是Object中必須設定主鍵欄位
6:DB中表與表之間的關係(如:外來鍵)對映成為Object之間的關係
7:Object中屬性的個數和名稱可以和表中定義的欄位個數和名稱不一樣
Hibernate是怎麼工作的?
Hibernate主要用來實現Java物件和表之間的對映,除此之外還提供還提供資料查詢和獲取資料的方法,可以大幅度減少開發時人工使用SQL和JDBC處理資料的時間, Hibernate可以幫助你消除或者包裝那些針對特定廠商的SQL程式碼,並且幫你把結果集從表格式的表示形式轉換到一系列的物件去。
整體流程
1:通過configuration來讀cfg.xml檔案
2:得到SessionFactory 工廠
3:通過SessionFactory 工廠來建立Session例項
4:通過Session開啟事務
5:通過session的api操作資料庫
6:事務提交
7:關閉連線
Hibernate4.1.4 API 簡介
Configuration類(org.hibernate.cfg.Configuration)
負責配置和啟動Hibernate,建立SessionFactory例項
SessionFactory介面(org.hibernate.SessionFactory)
針對單個數據庫對映關係經過編譯後的記憶體映象,是執行緒安全的(不可變)。 它是生成Session的工廠,本身要用到ConnectionProvider,充當資料來源代理,一個SessionFactory對應一個數據源。
Session介面(org.hibernate.Session)
表示應用程式與持久儲存層之間互動操作的一個單執行緒物件,此介面物件生命週期很短,也是Transaction的工廠,負責CRUD的持久化操作,充當持久化管理器。約相當於JDBC的Connection+Statement/PreparedStatement的功能
Transaction介面(org.hibernate.Transaction)
應用程式用來指定原子操作單元範圍的物件,它是單執行緒的,此介面生命週期很短。它通過抽象將應用從底層具體的JDBC、JTA以及CORBA事務隔離開。其實就是封裝了底層的事務。
Query介面(org.hibernate.Query)、Criteria介面(org.hibernate.Criteria)
執行資料庫查詢,是更加面向物件形式的方式,主要用於各種關聯和條件查詢。
搭建 Hibernate4.1.4 工作環境
把hibernate-release-4.1.4資料夾裡面lib/required資料夾下的jar包全部新增到工程的library裡面,另外還需新增slf4j的實現包slf4j-log4j12-1.6.4.jar和log4j的實現包log4j-1.2.16.jar,還有別忘了把JDBC的驅動jar包也加入到library裡面。
配置hibernate.cfg.xml
1:預設名稱為hibernate.cfg.xml
2:存放在當前classes的根目錄下,開發的時候在src根下就可以了
3:主要有如下四部分配置 :
(1)與DB的連線
(2)可選配置
(3)資原始檔註冊
(4)二級快取
4:配置的時候可以到Hibernate發行包裡面找個hibernate.cfg.xml的例子,比如可以用“hibernate-release-4.1.4\project\etc”下面的hibernate.cfg.xml作例子,當需要配置快取的時候可以參考ehcache.xml檔案,還有Hibernate的屬性模版檔案,你們都是可選的屬性設定方法,另外該資料夾下的log4j.properties日誌檔案也可以用來參考
下面是手動用java程式碼來啟動Hibernate4.1.4:
啟動Hibernate其實就是建立一個SessionFatory,那麼就可以用SessionFactory創建出來的一個個Session物件進行對資料庫的持久化操作了。
ORMapping原理(Object Relational Mapping)
在以前使用的JDBC操作其實就是一個持久化的過程
JDBC的劣勢:
對於小型的應用開發而言,使用JDBC也許還不錯。但是對於大型應用而言,從上百張擁有幾十個欄位的資料表中讀取資料的話,就要寫很多getXXX()方法,所以JDBC在程式碼開發環節來講有高出錯率和低複用性。
隨著Hibernate的日趨成熟,從易用性和高效性角度來講,JDBC在記錄的批量操作,多表連線,表單級聯方面表現並不優秀。
ORMapping基本對應規則:
1:類跟表相對應
2:類的屬性跟表的欄位相對應
3:類的例項與表中具體的一條記錄相對應
4:一個類可以對應多個表,一個表也可以對應對個類
5:DB中的表可以沒有主鍵,但是Object中必須設定主鍵欄位
6:DB中表與表之間的關係(如:外來鍵)對映成為Object之間的關係
7:Object中屬性的個數和名稱可以和表中定義的欄位個數和名稱不一樣
Hibernate是怎麼工作的?
Hibernate主要用來實現Java物件和表之間的對映,除此之外還提供還提供資料查詢和獲取資料的方法,可以大幅度減少開發時人工使用SQL和JDBC處理資料的時間, Hibernate可以幫助你消除或者包裝那些針對特定廠商的SQL程式碼,並且幫你把結果集從表格式的表示形式轉換到一系列的物件去。
整體流程
1:通過configuration來讀cfg.xml檔案
2:得到SessionFactory 工廠
3:通過SessionFactory 工廠來建立Session例項
4:通過Session開啟事務
5:通過session的api操作資料庫
6:事務提交
7:關閉連線
Hibernate4.1.4 API 簡介
Configuration類(org.hibernate.cfg.Configuration)
負責配置和啟動Hibernate,建立SessionFactory例項
SessionFactory介面(org.hibernate.SessionFactory)
針對單個數據庫對映關係經過編譯後的記憶體映象,是執行緒安全的(不可變)。 它是生成Session的工廠,本身要用到ConnectionProvider,充當資料來源代理,一個SessionFactory對應一個數據源。
Session介面(org.hibernate.Session)
表示應用程式與持久儲存層之間互動操作的一個單執行緒物件,此介面物件生命週期很短,也是Transaction的工廠,負責CRUD的持久化操作,充當持久化管理器。約相當於JDBC的Connection+Statement/PreparedStatement的功能
Transaction介面(org.hibernate.Transaction)
應用程式用來指定原子操作單元範圍的物件,它是單執行緒的,此介面生命週期很短。它通過抽象將應用從底層具體的JDBC、JTA以及CORBA事務隔離開。其實就是封裝了底層的事務。
Query介面(org.hibernate.Query)、Criteria介面(org.hibernate.Criteria)
執行資料庫查詢,是更加面向物件形式的方式,主要用於各種關聯和條件查詢。
搭建 Hibernate4.1.4 工作環境
把hibernate-release-4.1.4資料夾裡面lib/required資料夾下的jar包全部新增到工程的library裡面,另外還需新增slf4j的實現包slf4j-log4j12-1.6.4.jar和log4j的實現包log4j-1.2.16.jar,還有別忘了把JDBC的驅動jar包也加入到library裡面。
配置hibernate.cfg.xml
1:預設名稱為hibernate.cfg.xml
2:存放在當前classes的根目錄下,開發的時候在src根下就可以了
3:主要有如下四部分配置 :
(1)與DB的連線
(2)可選配置
(3)資原始檔註冊
(4)二級快取
4:配置的時候可以到Hibernate發行包裡面找個hibernate.cfg.xml的例子,比如可以用“hibernate-release-4.1.4\project\etc”下面的hibernate.cfg.xml作例子,當需要配置快取的時候可以參考ehcache.xml檔案,還有Hibernate的屬性模版檔案,你們都是可選的屬性設定方法,另外該資料夾下的log4j.properties日誌檔案也可以用來參考
下面是手動用java程式碼來啟動Hibernate4.1.4:
啟動Hibernate其實就是建立一個SessionFatory,那麼就可以用SessionFactory創建出來的一個個Session物件進行對資料庫的持久化操作了。