Hibernate是Java應用關係數據庫之間的橋樑,負責Java對象和關係數據之間的映射。Hibernate內部封裝了通過JDBC訪問數據庫的操作,向上層應用提供面向對象的數據訪問API。
Hibernate配置文件
Hibernate從其配置文件中讀取和數據庫連接有關的信息,Hibernate的配置文件有兩種形式,配置文件默認文件名hibernate.properties;另一種是XML格式的文件;還有一種是Java屬性文件,採用鍵值對形式。
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect hibernate.connection.driver_class=com.mysql.jdbc.Driver hibernate.connection.url=jdbc:mysql://localhost:3306/SAMPLEDB hibernate.connection.username=root hibernate.connection.password=1234 hibernate.show_sql=true
創建持久化類
持久化類是指其實例需要被Hibernate持久化到數據庫的類。持久化類通常都是域模型的實體域類。持久化類符合JavaBean規範,包含屬性,以及與之對對應的getXXX()和setXXX()方法。
Hibernate不需要持久化類必須實現java.io.Serializable接口,但對於採用分佈式結構的Java應用,當Java對象在不同的進程節點之間傳輸時,這個對象所屬的類必須實現Serializable接口。
在Java Web應用中,如果希望對HttpSession中存放的Java對象進行持久化,這個Java獨享所屬的類必須實現Serializable接口。
Hibernate要求持久化類必須提供一個不帶參數的默認構造方法,在程序運行時,Hibernate運用Java反射機制,調用java.lang.reflect.Constructor.newInstance()方法來構造持久化類的實例。
創建對象-關係映射文件
在運行時,Hibernate將根據這個映射文件來生成各種SQL語句。
Java類型、Hibernate映射類型以及SQL類型之間的對應關係
Java類型 | Hibernate類型 | SQL類型 |
java.lang.String | string | VARCHAR(n) |
int | int | INT |
char | character | CHAR(n) |
boolean | boolean | BIT |
byte[] | binary | BLOG |
java.sql.Date | date | DATE |
java.sql.Timestamp | timestamp | TIMESTAMP |
通過Hibernate API操作數據庫
public class BussinessService { public static SessionFactory sessionFactory; static { try { Configuration config = new Configuration(); config.addClass(Customer.class); sessionFactory = config.buildSessionFactory(); } catch (Exception e) { } } public void deleteAllCustomers() throws Exception { Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); session.delete("from Customer as C"); tx.commit(); } catch (Exception e) { if (tx != null) tx.rollback(); throw e; } finally { session.close(); } } }
Hiberante初始化
創建一個Configuration類的實例,Configuration類的構造方法把默認文件路徑下的hibernate配置文件中配置信息讀入到內存;
調用Configuration類中的addClass(Customer.class)方法,該方法把映射信息讀入到內存中;
調用Configuration類的buildSessionFactory()方法,該方法創建一個SessionFactory實例,併發Configuration對象包含的配置信息拷貝到SessionFactory對象的緩存中。SessionFactory達標一個數據庫存儲源,一個數據庫存儲源值需創建一個SessionFactory實例,SessionFactory不和Configuration關聯,如果修改Configuration對象包含的配置信息不會對SessionFactory對象有任何影響。
訪問Hibernate的Session接口
初始化結束後,調用SessionFactory實例的openSession()方法類獲得Session實例,然後通過它執行數據庫的操作,Session接口提供操作數據庫的各種方法:
save()方法:把Java獨喜愛那個保存到數據庫
update()方法:更新數據庫的Java隊形
delete()方法:把Java對象從數據庫中刪除
load()方法:從數據庫中加載Java對象
find()方法:從數據庫中查詢Java對象
Session是一個輕量級對象,通常每一個Session實例和一個數據庫事務綁定,即沒執行一個數據庫事務,都必須先創建一個新的Session實例。如果事務執行出現異常,應撤銷事務。無論事務是否執行成功,最後都應該關閉Session。
說明:筆記內容摘自《精通Hibernate:Java對象持久化技術詳解》