关闭

创建Session类

标签: sessionnullmyeclipseimport数据库工作
1057人阅读 评论(0) 收藏 举报
分类:
创建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自动生成的)
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:40413次
    • 积分:820
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:7篇
    • 译文:0篇
    • 评论:3条
    最新评论