创建Session类

原创 2007年09月26日 09:49:00
创建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自动生成的)

相关文章推荐

HttpSessionListener 实现类 监听 session创建于销毁时的动作

监听 session创建于销毁时的动作 ,用于用户安全相关问题是的统计,注销等操作 使用方法: 在web.xml文件中添加listener     路径.sessionlistener ...

监听session的创建到销毁

  • 2015年02月05日 15:22
  • 14.02MB
  • 下载

Spring MVC 通过session 创建执行任务队列

任务,在Spring MVC 框架中,一个server 方法内创建多个 任务(可能会有落地数据的操作),通过任务队列的形式可以使事务隔离开,也可以将多个任务包装起来,在需要的地方统一执行 1.增加队...

PHP创建和使用session cookie变量

  • 2011年11月17日 17:14
  • 2KB
  • 下载

使用HttpSessionListener接口监听Session的创建和失效

使用HttpSessionListener接口监听Session的创建和失效 博客分类:  tomcat Web应用服务器ServletJSPXML  HttpSessio...

PHP SESSION数据库存储管理类

  • 2012年08月20日 18:38
  • 3KB
  • 下载

VS2010 ATL服务程序编写全攻略(三) - 创建用户桌面进程(突破Session 0隔离)

上一篇中,我们完成了服务层与应用层的内核对象访问。 这篇文件,将主要说明如何在服务层创建一个用户进程,显示在用户桌面上,并且允许交互。 这里就引入了Windows Vista之后的Session ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建Session类
举报原因:
原因补充:

(最多只允许输入30个字)