HibernateSessionFactory的书上源代码

package cn.edu.ecut;

import com.fasterxml.classmate.AnnotationConfiguration;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.boot.MetadataSources;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {

    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    private static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
   // private static Configuration configuration = new AnnotationConfiguration();
    private static SessionFactory sessionFactory;
   // private static String configFile = CONFIG_FILE_LOCATION;//github源代码--24
    private static Configuration configuration= new Configuration();
    private static ServiceRegistry serviceRegistry;

    static {
        try {
            //configuration.configure(configFile);//github源代码--19
            configuration.configure();//得到configuration
            //sessionFactory = configuration.buildSessionFactory();
            serviceRegistry =new StandardServiceRegistryBuilder().configure().build();
            try {
                sessionFactory= new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
            }catch (Exception e){
                StandardServiceRegistryBuilder.destroy(serviceRegistry);
            }

        } catch (Exception e) {
            System.out.println("%%%% Error Creating SessionFactorv  %%%%");
            e.printStackTrace();
        }
    }

    private HibernateSessionFactory() {
    }

    public static Session getSession() throws HibernateException {

        Session session = (Session) threadlocal.get();
        if(session == null || !session.isOpen()) {
            if(sessionFactory == null) {
                rebuildSessionFactory();
            }
            session = (sessionFactory != null) ? sessionFactory.openSession(): null;
            threadlocal.set(session);
        }

        return session;
    }

    public static void rebuildSessionFactory(){
        try {
            //configuration.configure(configFile);//github源代码--19--24中的那个静态块
            configuration.configure();//得到configuration
            //sessionFactory = configuration.buildSessionFactory();
            serviceRegistry =new StandardServiceRegistryBuilder().configure().build();
            try {
                sessionFactory= new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
            }catch (Exception e){
                StandardServiceRegistryBuilder.destroy(serviceRegistry);
            }

        } catch (Exception e) {
            System.out.println("%%%% Error Creating SessionFactorv  %%%%");
            e.printStackTrace();
        }
    }

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

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
/**github源代码有多出这个,
//    public static void setConfigFile(String configFile){
//        HibernateSessionFactory.configFile = configFile;
//        sessionFactory = null;
//    }
  */
    public static Configuration getConfiguration() {
        return configuration;
    }
}

//其实github源代码中就使获取configuration对象方式不同
Github找到的源代码

package com.test.util;

import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {

private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
private static Configuration configuration = new AnnotationConfiguration();
private static SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;

static {
	try {
		configuration.configure(configFile);
		sessionFactory = configuration.buildSessionFactory();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

private HibernateSessionFactory() {
}

public static Session getSession() throws HibernateException {
	
	Session session = threadlocal.get();
	if(session == null || !session.isOpen()) {
		if(sessionFactory == null) {
			rebuildSessionFactory();
		}
		session = (sessionFactory != null) ? sessionFactory.openSession(): null;
		threadlocal.set(session);
	}
	
	return session;
}

public static void rebuildSessionFactory(){
	try {
		configuration.configure(configFile);
		sessionFactory = configuration.buildSessionFactory();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

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

public static SessionFactory getSessionFactory() {
	return sessionFactory;
}

public static void setConfigFile(String configFile){
	HibernateSessionFactory.configFile = configFile;
	sessionFactory = null;
}

public static Configuration getConfiguration() {
	return configuration;
}
}
发布了70 篇原创文章 · 获赞 71 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43625764/article/details/103530757