SessionFactory vs Session(・・?)

1. SessionFactory(会话工厂)

定义

SessionFactory 是 Hibernate 的一个核心接口,用于创建 Session 对象。它是一个线程安全的工厂类,通常在应用程序启动时创建,并在整个应用程序生命周期中保持不变。

主要职责
  • 创建 Session 对象SessionFactory 用于创建 Session 对象,Session 是 Hibernate 的核心接口,用于执行事务和持久化操作。

  • 配置 HibernateSessionFactory 负责加载 Hibernate 配置文件(如 hibernate.cfg.xmlapplication.properties),并初始化 Hibernate 环境。

  • 管理数据库连接SessionFactory 管理数据库连接池,提供高效的数据库连接管理。

示例代码
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            // 创建 Configuration 对象并加载配置文件
            Configuration configuration = new Configuration().configure();
            // 创建 SessionFactory
            sessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

2. Session(会话对象)

定义

Session 是 Hibernate 的核心接口,用于执行事务和持久化操作。Session 是线程不安全的,通常在请求处理过程中创建,并在请求结束时关闭。

主要职责
  • 执行事务Session 提供了事务管理功能,可以开始、提交和回滚事务。

  • 持久化操作Session 提供了保存、更新、删除和检索对象的方法。

  • 管理实体Session 管理实体的生命周期,包括加载、保存、更新和删除实体。

示例代码
import org.hibernate.Session;
import org.hibernate.Transaction;

public class UserDaoImpl implements UserDao {
    @Override
    public User createUser(User user) {
        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            Transaction transaction = session.beginTransaction();
            session.save(user);
            transaction.commit();
            return user;
        }
    }

    @Override
    public User getUser(Long id) {
        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            return session.get(User.class, id);
        }
    }
}

3. 区别

线程安全性
  • SessionFactory:线程安全的,可以在多个线程之间共享。

  • Session:线程不安全的,通常在请求处理过程中创建,并在请求结束时关闭。

生命周期
  • SessionFactory:通常在应用程序启动时创建,并在整个应用程序生命周期中保持不变。

  • Session:通常在请求处理过程中创建,并在请求结束时关闭。

主要用途
  • SessionFactory:用于创建 Session 对象,管理数据库连接池。

  • Session:用于执行事务和持久化操作,管理实体的生命周期。


4. 联系

  • SessionFactorySession 的工厂类,用于创建 Session 对象。

  • SessionSessionFactory 创建的实例,用于执行具体的事务和持久化操作。

  • SessionFactory 管理数据库连接池,而 Session 使用这些连接来执行数据库操作。


5. 总结

  • SessionFactory

    1. 线程安全:可以在多个线程之间共享。

    2. 生命周期:通常在应用程序启动时创建,并在整个应用程序生命周期中保持不变。

    3. 主要用途:用于创建 Session 对象,管理数据库连接池。

  • Session

    1. 线程不安全:通常在请求处理过程中创建,并在请求结束时关闭。

    2. 生命周期:通常在请求处理过程中创建,并在请求结束时关闭。

    3. 主要用途:用于执行事务和持久化操作,管理实体的生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值