Hibernate通用的连接工具类

Hibernate通用的连接工具类

我们使用的Hibernate做增删改的操作时,就会发现其实有很多的操作时相同的,这时我们就需要一个通用的获取连接和关闭资源的方法了,在这里为大家共一个Hibernate通用的连接工具类

package com.mokerson.hibernate.util;

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

/**
 * @author Mokerson_For_TGZ
 */
public class HibernateUtils {
    /**
     * ThreadLocal<Session>
     * 该类可以保证在多个线程下,为每个不同的线程提供局部的存储空间
     * 防止事务的冲突
     */
    private static final ThreadLocal<Session> SESSION_THREAD_LOCAL = new ThreadLocal<>();
    private static final SessionFactory SESSION_FACTORY;
    private static Session session;

    static {
        // 创建Session工厂
        SESSION_FACTORY = new Configuration().configure().buildSessionFactory();
    }

    /**
     * 获取Session对象
     * @return  返回Session对象
     */
    public static Session getSession(){
        // 从线程局部空间中获取Session对象
        session = SESSION_THREAD_LOCAL.get();
        // 判断是否为第一次获取
        if(session == null){
            // 第一次获取就从Session工厂中创建
            session = SESSION_FACTORY.openSession();
            // 保存到线程局部空间中,以便在该线程其它处调用
            SESSION_THREAD_LOCAL.set(session);
        }
        return session;
    }

    /**
     * 销毁局部线程空间中的Session对象
     */
    public static void closeSession(){
        // 因为它们使用的是同一个Session对象,所以不需要从那边传参过来
        session.close();
        // 移除之保存在线程局部空间内的Session对象
        SESSION_THREAD_LOCAL.remove();
    }
}
发布了28 篇原创文章 · 获赞 2 · 访问量 935

猜你喜欢

转载自blog.csdn.net/TanGuozheng_Java/article/details/103833449