歡迎您光臨本站 註冊首頁

Hibernate原理與應用

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
1、初始化代碼(只做一次)
Configuration cfg = newConfiguration();
cfg.configure("config.cfg.xml");
也可以通過cfg.setProperty設置屬性.
SessionFactory sessionFactory = cfg.buildSessionFactory()
2、模板代碼
Session session = null;Transaction tx =null;
try{
session= sessionFactory.openSession();
tx= session.beginTransaction();
//…你的代碼save,delete,update,get…
tx.commit();
}catch(Exceptione){
if(tx!=null)tx.rollback();throw e;
}finally{
if(session!= null)session.close();
}
3 Session的幾個主要方法
1、save保存數據
2、delete,刪除對象
3、update,更新對象,如果資料庫中沒有記錄,會出現異常.
4、get,根據ID查,會立刻訪問資料庫.
5、Load,根據ID查,(返回的是代理,不會立即訪問資料庫).
6、saveOrUpdate(根據ID和version的值來確定是save或update
4 主鍵生成機制
Increment:由hibernate自動以遞增的方式生成標識符,每次增量為1.
Indentity:由低層資料庫生成標識符,條件是資料庫支持自動增長數據類型.
Sequence:hibernate根據底層資料庫對自動生成標識符,天健是資料庫支持序列
Native:根據底層資料庫對自動生成的能力來選擇indentity,sequence,hilo.
Uuid.Hex:hibernate採用128位的uuid演算法來生成標識符,這種策略並不流行,因為字元串類型的主鍵比整數類型的主鍵佔用更多的資料庫空間.
Assigned:適用於自然主鍵,由java程序負責生成標識符,不能把setId()方法聲明為private的,盡量避免使用自然主鍵
Foreign:使用另外一個相關聯的對象的標識符,常和<one-to-one>聯合使用.
對象狀態:
瞬時(transient):資料庫中沒有數據與之對應,超過作用域會被JVM垃圾回收器回收,一般是new出來且與session沒有關聯的對象.
持久(persistent):資料庫中可能有數據與之對應,當前與session有關聯,並且相關聯的session沒有關閉,事務沒有提交;持久對象狀態發生改變,在事務提交時會影響到資料庫(hibernate能檢測到).
脫管(detached):資料庫中可能有數據與之對應,但當前沒有session與之關聯;託管對象狀態發生改變,hibernate不能檢測到.
操縱持久化對象-save()
Session 的save() 方法使一個臨時對象轉變為持久化對象
Session 的save() 方法完成以下操作:
把News 對象加入到Session緩存中, 使它進入持久化狀態
選用映射文件指定的標識符生成器, 為持久化對象分配唯一的OID.在使用代理主鍵的情況下, setId() 方法為News 對象設置OID 使無效的.


計劃執行一條insert 語句,把Customer對象當前的屬性值組裝到insert語句中
Hibernate 通過持久化對象的OID 來維持它和資料庫相關記錄的對應關係. 當News 對象處於持久化狀態時, 不允許程序隨意修改它的ID
操縱持久化對象-update()
Session 的update() 方法使一個遊離對象轉變為持久化對象, 並且計劃執行一條update 語句.
操縱持久化對象-saveOrupdate()
saveOrUpdate:
該方法同時包含save和update方法,如果參數是臨時對象就用save方法,如果是遊離對象就用update方法,如果是持久化對象就直接返回.


[火星人 ] Hibernate原理與應用已經有756次圍觀

http://coctec.com/docs/java/show-post-59770.html