自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

輕松理解Hibernate Session管理入門

開發(fā) 后端
Hibernate Session是由SessionFactory所創(chuàng)建,SessionFactory是執(zhí)行緒安全的(Thread-Safe),您可以讓多個(gè)執(zhí)行緒同時(shí)存取SessionFactory而不會(huì)有數(shù)據(jù)共享的問題。

本文就Hibernate  Session的入門加以簡(jiǎn)單介紹。

Hibernate  Session是Hibernate運(yùn)作的中心,對(duì)象的生命周期、事務(wù)的管理、數(shù)據(jù)庫的存取,都與 Session息息相關(guān),就如同在編寫JDBC時(shí)需關(guān)心Connection的管理,以有效的方法創(chuàng)建、利用與回收Connection,以減少資源的消耗,增加系統(tǒng)執(zhí)行效能一樣,有效的Session管理,也是Hibernate應(yīng)用時(shí)需關(guān)注的焦點(diǎn)。

Hibernate Session是由SessionFactory所創(chuàng)建,SessionFactory是執(zhí)行緒安全的(Thread-Safe),您可以讓多個(gè)執(zhí)行緒同時(shí)存取SessionFactory而不會(huì)有數(shù)據(jù)共享的問題,然而Session則不是設(shè)計(jì)為執(zhí)行緒安全的,所以試圖讓多個(gè)執(zhí)行緒共享一個(gè) Session,將會(huì)發(fā)生數(shù)據(jù)共享而發(fā)生混亂的問題。

在Hibernate參考手冊(cè)中的***章快速入門中,示范了一個(gè)HibernateUtil,它使用了ThreadLocal類別來建立一個(gè) Session管理的輔助類,這是Hibernate Session管理一個(gè)廣為應(yīng)用的解決方案,ThreadLocal是Thread- Specific Storage模式的一個(gè)運(yùn)作實(shí)例,您可以在下面這篇文章中了解Thread-Specific Storage模式:
designpattern:Thread-Specific Storage

由于Thread-Specific Stroage模式可以有效隔離執(zhí)行緒所使用的數(shù)據(jù),所以避開Session的多執(zhí)行緒之間的數(shù)據(jù)共享問題,以下列出Hibernate參考手冊(cè)中的HibernateUtil類:

  1. HibernateUtil.java   
  2. import net.sf.hibernate.*;   
  3. import net.sf.hibernate.cfg.*;   
  4.  
  5. public class HibernateUtil {   
  6.  
  7. private static Log log = LogFactory.getLog(HibernateUtil.class);   
  8.  
  9. private static final SessionFactory sessionFactory;   
  10.  
  11. static {   
  12. try {   
  13. // Create the SessionFactory   
  14. sessionFactory = new Configuration().configure().buildSessionFactory();   
  15. } catch (Throwable ex) {   
  16. log.error("Initial SessionFactory creation failed.", ex);   
  17. throw new ExceptionInInitializerError(ex);   
  18. }   
  19. }   
  20.  
  21. public static final ThreadLocal session = new ThreadLocal();   
  22.  
  23. public static Session currentSession() throws HibernateException {   
  24. Session s = (Session) session.get();   
  25. // Open a new Session, if this Thread has none yet   
  26. if (s == null) {   
  27. s = sessionFactory.openSession();   
  28. session.set(s);   
  29. }   
  30. return s;   
  31. }   
  32.  
  33. public static void closeSession() throws HibernateException {   
  34. Session s = (Session) session.get();   
  35. session.set(null);   
  36. if (s != null)   
  37. s.close();   
  38. }   
  39. }   

在同一個(gè)執(zhí)行緒中,Session被暫存下來了,但無須擔(dān)心數(shù)據(jù)庫連結(jié)Connection持續(xù)占用問題,Hibernate會(huì)在真正需要數(shù)據(jù)庫操作時(shí)才(從連接池中)取得Connection。

在Web應(yīng)用程序中,我們可以藉助Filter來進(jìn)行Session管理,在需要的時(shí)候開啟Session,并在Request結(jié)束之后關(guān)閉Session,這個(gè)部份,在JavaWorld的Wiki上有個(gè)很好的例子:
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=805
另外在Hibernate中文網(wǎng)上也有一篇介紹:
http://www.hibernate.org.cn/80.html


【編輯推薦】

  1. Hibernate性能優(yōu)化全面剖析
  2. 對(duì)Hibernate中g(shù)et()與load()不同點(diǎn)分析
  3. Struts-Spring-Hibernate案例
  4. 簡(jiǎn)述Hibernate配置連接池
  5. 對(duì)Hibernate中g(shù)et()與load()不同點(diǎn)分析
責(zé)任編輯:仲衡 來源: 360doc
相關(guān)推薦

2011-04-13 09:53:20

2024-07-31 15:39:00

2009-09-29 16:04:29

Hibernate S

2009-09-24 17:24:20

Hibernate S

2010-06-21 13:43:46

2009-09-25 10:53:40

Hibernate S

2009-09-22 10:09:21

Hibernate S

2009-09-25 09:46:03

Hibernate s

2009-09-23 17:03:08

Hibernate S

2009-09-25 13:51:13

Hibernate S

2009-09-23 17:18:16

Hibernate S

2015-03-02 15:56:36

2011-02-24 15:04:00

PostgreSQL數(shù)據(jù)庫psql

2011-03-24 14:40:29

PostgreSQL數(shù)管理

2009-06-12 16:00:13

Session方法Hibernate

2009-06-26 16:34:50

delete()方法Hibernate S

2009-06-26 16:33:09

saveOrUpdatHibernate

2025-03-03 10:00:00

2009-09-23 14:23:51

Hibernate主鍵

2009-09-24 09:44:32

Hibernate j
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)