1 package com.wj.app.util; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.cfg.Configuration; 6 import org.hibernate.service.ServiceRegistry; 7 import org.hibernate.service.ServiceRegistryBuilder; 8 9 public class HibernateUtil { 10 public static final SessionFactory sessionFactory; 11 //ThreadLocal可以隔离多个线程的数据共享,因此不需要对线程进行同步 12 public static ThreadLocal<Session> session = new ThreadLocal<Session>(); 13 static 14 { 15 //使用默认配置文件创建Configuration实例 16 Configuration cfg = new Configuration() 17 .configure(); 18 19 //以Configuration实例来创建SessionFactory实例 20 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() 21 .applySettings(cfg.getProperties()) 22 .buildServiceRegistry(); 23 24 /*ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() 25 .applySettings(cfg.getProperties()).build();*/ 26 27 sessionFactory = cfg.buildSessionFactory(serviceRegistry); 28 } 29 public static Session currentSession() { 30 31 Session s = session.get(); 32 //如果该线程还没有Session,则创建一个新的Session 33 if (s == null) 34 { 35 s = sessionFactory.openSession(); 36 //将获得的Session变量存储在ThreadLocal变量session里 37 session.set(s); 38 } 39 return s; 40 } 41 42 public static void clossSession() { 43 Session s = session.get(); 44 if (s != null) 45 { 46 s.close(); 47 } 48 session.set(null); 49 } 50 } |
|