创建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自动生成的)

C# Session 操作类

using System.Web; namespace DotNet.Utilities { /// /// Session 操作类 /// 1、GetSession(st...
  • zuoyefeng1990
  • zuoyefeng1990
  • 2017年04月27日 09:16
  • 905

给你的session加个监听器

 今天一个学生问我怎么实现在网页里显示在线用户的名称——他已经使用了session,但是无法处理用户离开的情况,然后导致在线用户列表的无限增大。跟他说了自己在application中进行超时检查,更新...
  • lenhan12345
  • lenhan12345
  • 2007年02月09日 15:34
  • 658

java服务器何时创建Session

Session 机制: session机制是一种服务器端的机制, 用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。 当程序需要为某个客户端的请求创建一个session的时候...
  • liang0000zai
  • liang0000zai
  • 2016年05月20日 10:57
  • 7057

session是什么时候创建的?

一直以来javaweb伴随着web工程师,可是太多人忙于框架之上的CRUD,底层的一些基本原理忽略了。现在让我从session开始慢慢捡起来javaweb的基本原理吧。    先介绍一下测试环境: ...
  • u012308971
  • u012308971
  • 2017年08月07日 19:02
  • 850

HttpSession的创建

问题一、session在何时被创建       问过很多人,大家对session创建的时机有一个常见的误解就认为session在有客户端访问时就被创建,但想了好久也没有想明白既然request....
  • woshiren123ew
  • woshiren123ew
  • 2017年02月20日 10:17
  • 966

JavaWeb创建session

1、 HttpSession session = ServletActionContext.getRequest().getSession(); //创建 2、 ActionContext.getCo...
  • wanghui1994
  • wanghui1994
  • 2015年04月09日 00:02
  • 1963

Session的创建时间

转载于:http://holdbelief.javaeye.com/blog/228808  上一篇文章转载了《Cookie和Session专题 》,读了以后发现自己很多地方真的很白,里面的第14条:...
  • zgmzyr
  • zgmzyr
  • 2010年08月28日 22:30
  • 3892

session的创建与销毁

session是把信息保存在服务器端,它会消耗服务器的资源,因此不要随便利用session,除非不得已而为之。        session在我们程序中保存用户信息时一般都会用到,那么它在何时创建呢...
  • zxl333
  • zxl333
  • 2012年05月16日 22:21
  • 6083

使用监听器跟踪session的生命周期和session的属性

一.使用监听器跟踪session的生命周期   方法:创建一个实现HttpSessionListener接口的监听器,然后在部署描述文件重注册该类。    注:servlet API提供了javax...
  • xiejn
  • xiejn
  • 2006年06月24日 18:49
  • 2997

asp.net,在公共类中访问Session

System.Web.HttpContext.Current.Session[sessionName] 
  • sweetsoft
  • sweetsoft
  • 2007年08月08日 11:50
  • 1953
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建Session类
举报原因:
原因补充:

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