SessionFactory就相当于之前的数据连接池 他存放了大量的session
- SessionFactory 相当于java web连接池,用于管理所有session
- 获得SessionFactory 方式:config.buildSessionFactory();
- sessionFactory 还用于缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)
- SessionFactory线程安全,多个线程同时访问时,不会出现线程并发访问问题。
Session 会话
session会话的获取
- sessionFactory提供了两个方法来获取session
- factory.openSession() 获取一个全新的session 需要手动关闭
- factory.getCurrentSession() 获取一个与当前线程绑定的session 不需要手动关闭
第二种方法需要注意:
a.要使用这个方法必须在hibernate.cfg.xml中配置
<property name="hibernate.current_session_context_class">thread</property>
b.hibernate支持,将创建的session绑定到本地线程中,底层使用ThreadLocal,在程序之间共享session。
c.如果提交或者回滚事务,底层将自动关闭session 所以不需要我们手动关闭