package vince;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* 用Configuration产生SessionFactory的代码是非常耗时的
* 我们希望它只执行一次
* 因此做这个工具类来初始化hibernate
* 由于工具类一般不希望被继承
* 用final
* @author Vincent
* @version 1.0
*/
public final class HibernateUtil {
public static final SessionFactory sessionFactory;
static
{
try
{
//采用默认的hibernate.cfg.xml来启动一个Configuration的实例
Configuration configuration=new Configuration().configure();
//由Configuration的实例来创建一个SessionFactory实例
sessionFactory=configuration.buildSessionFactory();
}
catch(Throwable ex)
{
System.err.println("Initial SessionFaction creation failed."+ex);
throw new ExceptionInInitializerError(ex);
}
}
//ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步
public static final ThreadLocal<Session> session
=new ThreadLocal<Session>();
public static Session getSession() throws HibernateException
{
Session s=session.get();
//如果该线程还没有Session,则创建一个新的Session
if(s==null)
{
s=sessionFactory.openSession();
//将获得的Session存储在ThreadLocal变量session里
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException
{
Session s=session.get();
if(s!=null)
s.close();
session.set(null);
}
}
编写HibernateUtil工具类去初始化hibernate
最新推荐文章于 2022-04-21 13:34:04 发布