日期:2014-05-18  浏览次数:20727 次

学习hibernate 谁能给我解释一段下面的代码 很基础
public   class   HibernateUtil   {

private   static   Log   log=LogFactory.getLog(HibernateUtil.class);

private   static   final   SessionFactory   sessionFactory;

static   {
    try{
    sessionFactory=new   Configuration().configure().buildSessionFactory();
    }   catch   (Throwable   ex)   {
        log.error( "Initial   SessionFactory   creation   failed. ",ex);
        throw   new   ExceptionInInitializerError(ex);
    }
}

public   static   final   ThreadLocal   session=new   ThreadLocal();

public   static   Session   currentSession()   throws   HibernateException   {
    Session   s=(Session)session.get();
    //Open   a   new   Session,   if   this   Thread   has   none   yet
    if   (s==null)   {
        s=sessionFactory.openSession();
        session.set(s);
    }
    return   s;
}

public   static   void   closeSession()   throws   HibernateException   {
    Session   s=(Session)   session.get();
    session.set(null);
    if   (s   !=null)
        s.close();
    }

}
尤其是下面这段------------------------------------------------
static   {
    try{
    sessionFactory=new   Configuration().configure().buildSessionFactory();
    }   catch   (Throwable   ex)   {
        log.error( "Initial   SessionFactory   creation   failed. ",ex);
        throw   new   ExceptionInInitializerError(ex);
    }
}
加上了个static   是什么意思     有什么用   所谓的静态代码   在什么情况下执行啊

------解决方案--------------------
static {}
你可以把他看成声明一个静态变量,他要在构造函数之前调用的,他这样的代码的优势就是提高了代码的效率,仅仅在第一次实例或用这个类的时候才执行其中的内容。

而sessionFactory=new Configuration().configure().buildSessionFactory();的意思是从HIBERNATE配制文件中进行对HIEBRNATE的配制,通俗点就是从你的hibernate.cfg.xml里拿数据了。
------解决方案--------------------
程序运行时把sessionfactory仍到内存里以后用都用这一个,对于开发一般sessionfactory都保持一个,除非你是选用多个数据库