使用单例模式创建SessionFactory

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

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

<property name="hibernate.current_session_context_class">thread</property>

在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的单例模式使用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值