標籤:
- 1.Hibernate是什麼?
Hibernate是一個開放原始碼的對象關係映射架構,它對JDBC進行了非常輕量級的對象封裝,使得Java程式員可以隨心所欲的使用對象編程思維來操縱資料庫。
對象關係映射簡稱ORM(Object Relational Mapping),由於我們目前使用的程式設計語言大都是物件導向的編程,使用的資料庫也大多都是關係型資料庫,資料得以對象的形式在程式中使用,並且程式中 的有些對象(資料對象)得永久儲存在資料庫中,故就出現了ORM,說得更通俗點:ORM就是將資料庫中的資料和程式中的對象進行互相的轉換!
如今的ORM架構可以說是很豐富的:
- Hibernate,開源 ORM 架構,廣泛使用(使用最廣泛)
- iBATIS,開源,由ASF維護,並且有 .NET移植(使用的也較廣泛)
- TopLink,由Oracle開發
- Cayenne,Apache,java 開源
- QuickDB ORM,開源 ORM 架構 (GNU LGPL)
- Java Data Objects (JDO)
- Java Persistence API (JPA)
- JPOX,開源 JDO 2 參考實現
- Object Relational Bridge (Apache OJB),一個Java的對象關係映射器
- OpenJPA,Apache,開源,支援 JPA API
2.Hibernate跟jdbc的關係
Hibernate封裝JDBC,持久化記憶體中的對象,同步到資料庫 .
1.關於封裝,我得強調兩點:
(1).把儘可能多的東西藏起來.對外提供簡捷的介面.
(2)把所有的屬性藏起來
當然我們,我們如果能夠做到單一原則就更好了
2.關於持久化的概念
持久化定義:將程式資料在持久狀態和瞬時狀態間轉換的機制。
這裡講的是Hibernate的話得講一下中的幾種狀態:瞬時狀態,持久狀態,脫管狀態
- 瞬時狀態(Transient):指一個對象在記憶體中開闢空間.如 User user=new User();此時user對象就是瞬時狀態的.
- 持久狀態(Persistent):資料(如記憶體中的對象)儲存到可永久儲存的存放裝置中(如磁碟)。可以以檔案,資料庫以及xml等形式.
- 脫管狀態(Detached):當與某持久對象關聯的session被關閉後,該持久對象轉變為脫管對象。當脫管對象被重新關聯到session上時,並再次轉變成持久對象。
這裡我想總結一點關於瞬時狀態和持久狀態:瞬時態就是存在於記憶體中的,如果電腦關了後,再啟動,之前在記憶體中的對象已經不在了,如果持久狀態的話,儲存在磁碟上的資料對象,當需要時還是可以載入到記憶體中,不會因電腦的啟動而受到影響!
3.Session Session介面是Hibernate向程式提供操縱資料庫的最主要介面,
- 瞬時狀態(Transient):沒與session關聯
- 持久狀態(Persistent):與session關聯,沒close
- 脫管狀態(Detached):當session.close後
4.Session的方法詳解
1.儲存
svae:立即插入資料庫,並且返回主鍵
persist:不立即(延遲)插入資料庫,無傳回值
2.擷取
load:載入對象後,對對象的改動不會立即重新整理到db,必須flush到db
ex: User user=session.load(User.class,2);
user.setName(‘gt‘);
user.flush(); (消極式載入)
get:載入對象後,對對象的改動立即重新整理到db
3.更新
update:持久化對象,更新
saveOrUpdate:包含save()和update()功能,如果傳入的參數是臨時對象(沒有儲存過)就調用save()方法;如果傳入的參數是游離對象,就調用update()方法
merge:不會持久化對象,只會把託管對象的修改更新到db
4.刪除
delete:從資料庫中刪除與JAVA對象對應的記錄
5.清理
flush:把緩衝同步到db
clear:清除session的緩衝大小(更新批量時,應考慮)
5.映射關係
詳見部落格內單獨介紹的文章
hibernate簡介(Session,幾種狀態,方法······等)