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

本文介绍了一个用于管理Hibernate会话的实用工具类HibernateUtil。该类通过ThreadLocal确保每个线程拥有独立的Session实例,避免了多线程环境下共享数据库连接的安全隐患。文章详细解释了如何初始化配置、获取及关闭Session。
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,每次用时可以直接使用

转载于:https://www.cnblogs.com/jimorulang/p/5551899.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值