Hibernate通用的连接工具类
我们使用的Hibernate做增删改的操作时,就会发现其实有很多的操作时相同的,这时我们就需要一个通用的获取连接和关闭资源的方法了,在这里为大家共一个Hibernate通用的连接工具类
package com.mokerson.hibernate.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author Mokerson_For_TGZ
*/
public class HibernateUtils {
/**
* ThreadLocal<Session>
* 该类可以保证在多个线程下,为每个不同的线程提供局部的存储空间
* 防止事务的冲突
*/
private static final ThreadLocal<Session> SESSION_THREAD_LOCAL = new ThreadLocal<>();
private static final SessionFactory SESSION_FACTORY;
private static Session session;
static {
// 创建Session工厂
SESSION_FACTORY = new Configuration().configure().buildSessionFactory();
}
/**
* 获取Session对象
* @return 返回Session对象
*/
public static Session getSession(){
// 从线程局部空间中获取Session对象
session = SESSION_THREAD_LOCAL.get();
// 判断是否为第一次获取
if(session == null){
// 第一次获取就从Session工厂中创建
session = SESSION_FACTORY.openSession();
// 保存到线程局部空间中,以便在该线程其它处调用
SESSION_THREAD_LOCAL.set(session);
}
return session;
}
/**
* 销毁局部线程空间中的Session对象
*/
public static void closeSession(){
// 因为它们使用的是同一个Session对象,所以不需要从那边传参过来
session.close();
// 移除之保存在线程局部空间内的Session对象
SESSION_THREAD_LOCAL.remove();
}
}