HibernateUtil工具类的编写

package com.hlx.util;

import org.hibernate.*;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public final class HibernateUtil {
	// 初始化一个ThreadLocal对象
	private static final ThreadLocal sessionTL = new ThreadLocal();
	private static Configuration configuration;
	private final static SessionFactory sessionFactory;
	static {
		try {
			//加载配置文件hibernate.cfg.xml
			 configuration = new Configuration().configure();
//			 //获得会话工厂
//			 sessionFactory = configuration.buildSessionFactory();
			 
			// 这是Hibernate4.0之后引入的新特性,Service Register机制
			StandardServiceRegistry ssrRegistry = new StandardServiceRegistryBuilder()
					.applySettings(configuration.getProperties()).build();
			sessionFactory = configuration.buildSessionFactory(ssrRegistry);

		} catch (Throwable ex) {
			ex.printStackTrace();
			throw new ExceptionInInitializerError(ex);
		}
	}

	/**
	 * 获取Session
	 */
	public static Session currentSession() {
		// sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
		// 也就是我们需要的Session,多线程情况下共享数据库连接是不安全的。
		// ThreadLocal保证了每个线程都有自己的Session。
		Session session = (Session) sessionTL.get();
		// 如果session为null,则打开一个新的session
		if (session == null) {
			// 创建一个数据库连接对象session。
			session = sessionFactory.openSession();
			// 保存该数据库连接session到ThreadLocal中。
			sessionTL.set(session);
		}
		// 如果当前线程已经访问过数据库了,
		// 则从sessionTL中get()就可以获取该线程上次获取过的数据库连接对象。
		return session;
	}

	/**
	 * 关闭Session
	 */
	@SuppressWarnings("unchecked")
	public static void closeSession() {
		Session session = (Session) sessionTL.get();
		sessionTL.set(null);
		session.close();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值