创建Session类 在辅助类中从Configuration得到SessionFactory通过辅助类创建Session类的实例使用Session类的各个方法来完成持久化的工作 HibernateSessionFactory.java import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; public class HibernateSessionFactory ... { // 设定配置文件hibernate.cfg.xml的路径,本例直接设定在classpath下 private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; // 保持一个单例的Session所使用的ThreadLocal private static final ThreadLocal threadLocal = new ThreadLocal(); // 一个单例的Configuration类实例 private static Configuration configuration = new Configuration(); // 一个单例的SessionFactory类实例 private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; private HibernateSessionFactory() ...{ } // 返回一个Session实例的单例方法,它将保持永远只返回一个Session实例 public static Session getSession() throws HibernateException ...{ // 从ThreadLocal类中取得一个Session实例 // ThreadLocal类保证每个实例都有自己的数据库连接 Session session = (Session) threadLocal.get(); // 若该Session实例为null则创建一个新的Session实例;否则就会直接返回已存在的Session实例 if (session == null || !session.isOpen()) ...{ if (sessionFactory == null) ...{ rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; // 将创建的Session实例放入当前线程中 threadLocal.set(session); } return session; } public static void rebuildSessionFactory() ...{ try ...{ configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) ...{ System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } //关闭一个单例Session实例 public static void closeSession() throws HibernateException ...{ Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) ...{ session.close(); } } public static org.hibernate.SessionFactory getSessionFactory() ...{ return sessionFactory; } public static void setConfigFile(String configFile) ...{ HibernateSessionFactory.configFile = configFile; sessionFactory = null; } public static Configuration getConfiguration() ...{ return configuration; }} 辅助类HibernateSessionFactory利用 单例模式 来完成创建Session实例和关闭Session实例的工作,也可以把它看成是创建数据库连接和关闭数据库连接的工作。它提供了两个方法分别对应这两种工作:getSession方法和closeSession方法。这两个方法保证在客户端调用时永远只生成一个Session实例。 (我这个HibernateSessionFactory是由MyEclipse自动生成的)