HibernateUtil.java,用于打开和关闭session,可在每一个项目里复用

 1 package cn.jbit.auction.dao;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.cfg.Configuration;
 6 
 7 public class HibernateUtil {
 8     // 初始化一个ThreadLocal对象
 9     private static final ThreadLocal sessionTL = new ThreadLocal(); 
10     private static Configuration configuration;
11     private final static SessionFactory sessionFactory;
12     static {
13         try {
14             configuration = new Configuration().configure();
15             sessionFactory = configuration.buildSessionFactory();
16         } catch (Throwable ex) {
17             throw new ExceptionInInitializerError(ex);
18         }
19     }
20     public static Session currentSession() {
21         //sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
22         //也就是我们需要的Session,多线程情况下共享数据库连接是不安全的。
23         //ThreadLocal保证了每个线程都有自己的Session。
24         Session session = (Session) sessionTL.get(); 
25         // 如果session为null,则打开一个新的session
26         if (session == null) { 
27             //创建一个数据库连接对象session。
28             session = sessionFactory.openSession(); 
29             // 保存该数据库连接session到ThreadLocal中。
30             sessionTL.set(session); 
31         }
32         //如果当前线程已经访问过数据库了,
33         //则从sessionTL中get()就可以获取该线程上次获取过的数据库连接对象。
34         return session; 
35     }
36     /**
37      * 关闭Session
38      */
39     public static void closeSession(){
40         Session session = (Session) sessionTL.get(); 
41         sessionTL.set(null);
42         session.close();
43     }
44 }

 

posted on 2016-06-02 20:15  如风105  阅读(1410)  评论(1编辑  收藏  举报

导航