Hibernate 笔记(2)-封装HibernateSessionFactory

来源:互联网 发布:ledrom编辑软件 编辑:程序博客网 时间:2024/05/01 06:14

因为Session是线程不安全的,为了保证当前线程只有一个session对象,并且当前线程中的Session不能让其他线程来访问,需要将获取Session的方法进行封装,为了保证Session的线程安全性,需要将Session放到ThreadLocal中。
ThreadLocal为线程本地变量
封装过程:(非常重要)

public class HibernateSessionFactory {    private static String configFile ="/hibernate.cfg.xml";    //声明一个线程本地变量,用来存放当前中的Session,保证不让其他线程访问到    private static ThreadLocal<Session> threadLocal = new ThreadLocal<>();    private static Configuration config = new Configuration();    private static SessionFactory sessionFactory;    static {        //读取配置文件        config.configure(configFile);        //创建sessionFactory        sessionFactory = config.buildSessionFactory();    }    //获取session    public static Session getSession() {        /*当获取Session的时候先到当前线程的本地变量中寻找,如果有直接返回,         *如果有直接返回,如果没有或者当前线程已经关闭需要重新开启一个Session         *,返回,并且放到当前线程中         */        Session session = threadLocal.get();        if(session == null || !session.isOpen()){            session =(sessionFactory != null) ? sessionFactory.openSession() : null;            threadLocal.set(session);        }        return session;    }    //关闭session    public static void close(){        /*         *关闭的时候先到当前线程中的本地变量中拿到session,如果可以取到,直接关闭         *最后将本地变量清空         */        Session session = threadLocal.get();        threadLocal.set(null);        if(session!=null){            session.close();        }    }}
0 0