public class HibernateUtil {
private static final SessionFactory sessionFactory;
//使用ThreadLocal管理Session
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
static {
try {
//根据hibernate.cfg.xml建立SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
ex.printStackTrace();
System.err.println("建立SessionFactory错误" + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
session = (sessionFactory != null) ? sessionFactory.openSession(): null;
threadLocal.set(session);
}
return session;
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
}HibernateUtil工具类
最新推荐文章于 2018-09-27 20:27:06 发布
本文深入探讨了Java中Session管理的核心技术,特别是如何利用ThreadLocal实现线程安全的Session共享。通过剖析SessionFactory和Session的创建、获取、使用及关闭流程,为开发者提供了一种高效、可靠的Session管理方案。
801

被折叠的 条评论
为什么被折叠?



