将session对象与当前线程进行绑定,因为session是线程不安全的,所以必须将session与当前线程进行绑定。这就是session常见的优化。这里先采用ThreadLocal的方式来处理。
创建工厂类,封装一系列操作,返回与当前线程绑定的session对象
代码如下:
package com.iotek.basic.common;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static Configuration configuration;
private static SessionFactory sessionFactory;
private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
static {
configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
sessionFactory = configuration.buildSessionFactory();
}
public static Session getSession() {
Session session = threadLocal.get();
if (session == null) {
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public static void closeSession() {
Session session = threadLocal.get();
if (session != null) {
session.close();
threadLocal.set(null);
}
}
}
网友评论