使用线程单列模式获得org.hibernate.Session对象
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateSessionFactory {
private static Configuration conf;
private static SessionFactory sf;
private static ThreadLocal<Session> tl = new ThreadLocal<Session>();
//ThreadLocal<Session>内部是Map结构,用线程id作为key值,用来存放多个Session对象
static {
conf = new Configuration();
conf.configure();
sf = conf.buildSessionFactory();
}
public static Session getSession() {
Session session = tl.get();//以当前线程的id作为Key,取出一个Session对象
if (session == null) {
session = sf.openSession();//如果为空,则获取一个新的Session对象,并存入tl中
tl.set(session);
}
return session;
}
public static void closeSession() {//关闭一个session
Session session = tl.get();//以当前线程的id作为Key,取出一个Session对象
if (session != null) {//如果不为空,怎关闭
session.close();
tl.set(null);
}
}
}