创建Session类

创建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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值