一. Hibernate 初識
hibernate是一種ORM(object relation mapping,對象關系映射)框架,所謂的對象關系映射,通俗的說,就是把JAVA對象保存到關系型數據庫中。
hibernate要做的事,就是讓對象投影到關系數據庫中,然後實施持久化。其具體實現:建立對象到關系數據庫的映射.
Example: 建立User類到數據庫的映射
一個簡單的類User:
public class User{
private int id;
private String name;
}
User類對應的數據庫表USER:
column-name type rule
id number P
name varchar2 R
當進行持久化時,需要把對象的兩個屬性的值保存到數據庫存的USER中,如果使用JDBC的話,我們需要自己寫SQL,並獲取對象兩個屬性的值作為參數來進行持久話。SQL可能如下:
insert into USER(name) value(?);
當使用hibernate時,首無要作好對象到表的映射關系,使用配置文件來實現:
User.hbm.xml:
...
<class name="user" table="USER"><!--該類對象保存到USER表-->
<id name="id" column="id">
<generator class="native"/><!--這裡有很多策略來生成ID,這裡選擇本地自動生成,-->
</id>
<property name="name" column="name">
</class>
...
然後在通過hibernate.cfg.xml中配置到數據庫的聯接,並讀取User.hbm.xml文件,就建立了映射關系了。
當需要持久化對象時,需要使用到hibernate的session對象:
session.save(new User());
看到了嗎?我們只需要操作對象就行了,也就是說,編程的人不需要看到數據庫了,他只需要直接操作對象就行了。
當我們采用ORM框架之後,應用程序不再直接訪問底層的數據庫,而是以面向對象的方式來操作持久化對象(例如創建、修改、刪除等),而ORM框架則將這些面向對象操作轉換成底層的SQL操作。
hibernate 如何實現持久化?
答:
1.hibernate是一種ORM(object relation mapping,對象關系映射)框架,所謂的對象關系映射,通俗的說,就是把JAVA對象保存到關系型數據庫中,即進行持久化的框架。
2.hibernate進行持久化首先要建立對象到關系數據庫的映射。
3.hibernate根據定義的映射規則將對象持久化(保存到)數據庫存中。這就實現了對象持久化。
二. 序列化和持久化的區別
序列化也是一種對象服務,就是把內存中的對象序列化成流、或者把流反序列化成對象。需要實現2個接口:
voidSerialize(Streamstream,object o) 把對象序列化到流中
object Deserialize(Stream stream) 把流反序列化成對象
序列化和持久化很相似,有些人甚至混為一談,其實還是有區別的,
序列化是為了解決對象的傳輸問題,傳輸可以在線程之間、進程之間、內存外存之間、主機之間進行。我之所以在這裡提到序列化,是因為我們可以利用序列化來輔助持久化,可以說凡是可以持久化的對象都可以序列化,因為序列化相對容易一些(也不是很容易),所以主流的軟件基礎設施,比如.net和java,已經把序列化的框架完成了。
持久化(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化的主要應用是將內存中的對象存儲在的數據庫中,或者存儲在磁盤文件中、XML數據文件中等等。持久化是將程序數據在持久狀態和瞬時狀態間轉換的機制。 JDBC就是一種持久化機制。文件IO也是一種持久化機制。
持久化方案可以分為關系數據庫方案、文件方案、對象數據庫方案、xml數據庫方案,現今主流的持久化方案是關系數據庫方案,關系數據庫方案不僅解決了並發的問題,更重要的是,關系數據庫還提供了持久化服務之外的價值:統計分析功能。剛才我說到,凡是可以序列化的對象都可以持久化,極端的說,我們可以只建立一個表Object(OID,Bytes),但基本上沒有人這麼做,因為一旦這樣,我們就失去了關系數據庫額外的統計分析功能。
首先要說的是,Hibernate中ORM裡對應的映射文件BEAN,必須實現序列化.因為BEAN裡的數據需要存入數據庫(要轉化為二進制保存),進行存取工作.
JAVA類的數據 ,如果要進行相關的存儲工作(如寫文件,網絡傳輸,寫數據庫等),那麼這個數據的類 就必須實現序列化接口 (java.io.Serializable).
序列化 : 把對象轉換 為二進制數據(如網絡傳輸,存儲數據庫等),必須實現序列化接口 (java.io.Serializable).
持久化 : 把對象保存 在介質上(如寫文件,讀文件不是), 沒有接口實現,一般指方法調用.
對象只有在序列化之後才能進行持久化存儲,從持久化存儲介質加載的數據通過反序列化轉變成運行時對象。
Hibernate3.1.2_中文文檔PDF http://www.linuxidc.com/Linux/2016-02/128462.htm
Hibernate學習入門教程 http://www.linuxidc.com/Linux/2015-08/121498.htm
在Hibernate中開啟日志 http://www.linuxidc.com/Linux/2015-07/120499.htm
Hibernate+JUnit測試實體類生成數據庫表 http://www.linuxidc.com/Linux/2015-07/120161.htm
Hibernate整體理解 http://www.linuxidc.com/Linux/2014-07/104405.htm
Hibernate的映射機制 http://www.linuxidc.com/Linux/2014-12/110265.htm
Hibernate 的詳細介紹:請點這裡
Hibernate 的下載地址:請點這裡