使用单例模式创建SessionFactory

在上一次的文章中,我们通过建立了SessionFactory来开启了一个事务,但是这样的操作有一点不足之处,那就是每次调用某个接口方法时都会重新生成一个SessoinFactory,造成冗余。对此,我们通过使用SessoinFactory的单例模式来实现只生成一个SessoinFactory。

要实现SessoinFactory的单例模式,首先第一波我们要在Hibernate的配置文件中进行配置。

thread

在hibernate.cfg.xml中添加如上代码。

之后我们在包内新建一个HibernateUtil类,代码如下:

package cn.itcast.test;

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
	private static Configuration cfg;
	private static SessionFactory sf;
	
	static
	{
		try {
			cfg = new Configuration().configure();
			sf = cfg.buildSessionFactory();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static SessionFactory getSessionFactory(){
		return sf;
	}
}

之后我们将之前的测试类Test中的SessionFactory的调用方法替换为新建的HibernateSingleUtil中的接口方法,如下:

@Test  
	public void testQueryUserById(){
		// TODO Auto-generated method stub
		SessionFactory sf = null;	
		Session session = null;
		Transaction ts = null;
		try {
  			sf = HibernateUtil.getSessionFactory();
			session = sf.getCurrentSession();
			ts = session.beginTransaction();
            ORMdemo orm=(ORMdemo)session.get(ORMdemo.class, 1);
            //持久化
			System.out.println("ID:"+orm.getId()+" Username:"+orm.getUsername()+" Password:"+orm.getPassword());
			ts.commit();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			if(ts != null)
			{
				ts.rollback();
			}
			e.printStackTrace();
		}
	}
这样我们就可以通过HibernateUtil将所有的SessionFactory的生成方法封装到一起,实现了SessionFactory的单例模式使用。


你可能感兴趣的:(使用单例模式创建SessionFactory)