HibernateSessionFactoryUtil

手动创建session过程:

Configuration cfg = new Configuration().configure("/hibernate.cfg.xml");
		SessionFactory sf = cfg.buildSessionFactory();
		Session session = sf.openSession();
		Transaction t = session.beginTransaction();
		session.save(user);
		t.commit();
		session.close();

 

以下是自动创建session的过程:

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

public class HibernateSessionFactoryUtil {
		private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
		private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
		private static Configuration configuration = new Configuration();
		private static org.hibernate.SessionFactory sessionFactory;
		private static String configFile = CONFIG_FILE_LOCATION;

		static {
			try {
				configuration.configure(configFile);
				sessionFactory = configuration.buildSessionFactory();
			} catch (Exception e) {
				System.err.println("%%%% Error Creating SessionFactory %%%%");
				e.printStackTrace();
			}
		}

		private HibernateSessionFactoryUtil() {
		}

		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;
		}

		/**
		 * Rebuild hibernate session factory
		 * 
		 */
		public static void rebuildSessionFactory() {
			try {
				configuration.configure(configFile);
				sessionFactory = configuration.buildSessionFactory();
			} catch (Exception e) {
				System.err.println("%%%% Error Creating SessionFactory %%%%");
				e.printStackTrace();
			}
		}

		/**
		 * Close the single hibernate session instance.
		 * 
		 * @throws HibernateException
		 */
		public static void closeSession() throws HibernateException {
			Session session = (Session) threadLocal.get();
			threadLocal.set(null);

			if (session != null) {
				session.close();
			}
		}

		/**
		 * return session factory
		 * 
		 */
		public static org.hibernate.SessionFactory getSessionFactory() {
			return sessionFactory;
		}

		/**
		 * return session factory
		 * 
		 * session factory will be rebuilded in the next call
		 */
		public static void setConfigFile(String configFile) {
			HibernateSessionFactoryUtil.configFile = configFile;
			sessionFactory = null;
		}

		/**
		 * return hibernate configuration
		 * 
		 */
		public static Configuration getConfiguration() {
			return configuration;
		}

	}

 


改进的操作代码明显简化了:

Session session = HibernateSessionFactoryUtil.getSession();
		Transaction t = session.beginTransaction();
		session.save(user);
		t.commit();
		HibernateSessionFactoryUtil.closeSession();


 

你可能感兴趣的:(HibernateSessionFactoryUtil)