資源描述:
《Hibernate核心接口簡介》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Hibernate核心接口介紹Configuration類:配置Hibernate啟動Hibernate創(chuàng)建SessionFactory對象Configurationcfg=newConfiguration();//讀取默認(rèn)配置文件hibernate.cfg.xmlSessionFactorysf=cfg.configure().buildSessionFactory();//創(chuàng)建SessionFactorySessionFactory:初始化Hibernate創(chuàng)建Session對象線程安全—同一實例被多個線程共享重量級:代表一個數(shù)據(jù)庫內(nèi)部維護一個連接池openSession()總是創(chuàng)建新
2、的session,需要手動close()getCurrentSession()必須在hibernate.cfg.xml設(shè)置session上下文事務(wù)自動提交并且自動關(guān)閉session.從上下文環(huán)境中獲得session,如果當(dāng)時環(huán)境中不存就創(chuàng)建新的.如果環(huán)境中存在就使用環(huán)境中的,而且每次得到的都是同一個session(在session提交之前,提交之后就是新的了)應(yīng)用在一個session中有多個不同DAO操作處于一個事務(wù)時thread例子參見:StudentDAOTesttestGetSession()testGetCurrentSession()Session:負(fù)責(zé)保存、更新、刪除、加載和查詢對象輕量級--可以經(jīng)常創(chuàng)建或銷毀save();保存對象到數(shù)據(jù)庫不管是否開啟事務(wù)保證立即返回OID(主鍵)主要針對短會話persist();不保證立即返回OID(主鍵)主要針對長會話delete();只要有
7、OID就可以刪除get(clazz,id);直接發(fā)起SQL語句從數(shù)據(jù)庫中取出,不會延遲load(clazz,id);返回的是代理對象,等到真正要用到對象的內(nèi)容時(session關(guān)閉之前)才發(fā)起SQL語句update();student只要有OID就可以更新(數(shù)據(jù)庫有對應(yīng)ID)沒有不報錯但會更新所有字段merge();合并對象更新前會先select再更新saveOrUpdate()同時包含了save()和update()方法的功能如果傳入的參數(shù)是臨時對象,則調(diào)用save()方法如果傳入的參數(shù)是游離對象,則調(diào)用update()方法如果傳入的參數(shù)是持久化對象,則直接返回clear()清除sess
8、ion中的緩存.調(diào)用clear()方法會強制清除session緩存.不會與數(shù)據(jù)庫打交道.flush()不常用當(dāng)session的事務(wù)提交后,會強制進(jìn)行從內(nèi)存(session緩存)到數(shù)據(jù)庫的同步.默認(rèn)情況下是session的事務(wù)提交時同步.Transaction:tran=session.beginTransaction();//開始事務(wù)tran.commit();//先調(diào)用flush(),再提交事務(wù)tran.rollback();//回滾事務(wù)PO對象的三種狀態(tài)什么是session緩存Session緩存可以理解為session中的一個map成員,它的key為OIDvalue為持久化對象的引用用
9、來提高程序效率三種狀態(tài)的區(qū)別在于:對象在內(nèi)存、數(shù)據(jù)庫、session緩存三者中是否有OID臨時狀態(tài)內(nèi)存中的對象沒有OID,緩存中沒有OID,數(shù)據(jù)庫中也沒有OID執(zhí)行new或delete()后持久化狀態(tài)內(nèi)存中的對象有OID,緩存中有OID,數(shù)據(jù)庫中有OIDsave()load()get()update()saveOrUpdate()Query對象返回的集合游離(脫管)狀態(tài)內(nèi)存中的對象有OID,緩存中沒有OID,數(shù)據(jù)庫中可能有OIDflush()close()后