HibernateUtil的编写,主要是建立数据库的连接

package com.yh.entity;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    // 初始化一个ThreadLocal对象
    private static final ThreadLocal<Session> sessionTL = new ThreadLocal<Session>(); // 1
    private static Configuration configuration;
    private final static SessionFactory sessionFactory;
    static {
        try {
            configuration = new Configuration().configure();
            sessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            ex.printStackTrace();
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static Session currentSession() {
        //sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
        //也就是我们需要的Session,多线程情况下共享数据库链接是不安全的。
        //ThreadLocal保证了每个线程都有自己的Session。
        Session session = (Session) sessionTL.get(); // 2
        // 如果session为null,则打开一个新的session
        if (session == null) { // 3
            //创建一个数据库连接对象session。
            session = sessionFactory.openSession(); // 4
            // 保存该数据库连接session到ThreadLocal中。
            sessionTL.set(session); // 5
        }
        //如果当前线程已经访问过数据库了,
        //则从sessionTL中get()就可以获取该线程上次获取过的数据库连接对象。
        return session; // 6
    }
    public static void closeSession(){
        Session session = (Session) sessionTL.get(); // 2
        sessionTL.set(null);
        if(session!=null)
            session.close();
    }

}

建立与数据库的连接,打开session,和关闭session,每次用时可以直接使用

posted on 2016-06-02 09:32  如风105  阅读(192)  评论(0编辑  收藏  举报

导航