hibernate对session的管理

6.1把Session绑定在当前线程

​ 在开发中,通常在业务层进行事物管理,在Dao层操作数据库. 也就是说业务层需要连接(Session)开启事物,Dao层需要连接(Session)操作数据库,如何保证这些连接是同一个呢?

​ 在JDBC阶段,我们通过了两种方式解决:

​ 1.向下传递参数

​ 2.绑定到TreadLocal里面.

​ 在Hibernate中,Session 对象与本地线程绑定很简单,只需要两步:

  • 在hibernate.cfg.xml文件中,添加属性,开启与本地线程绑定的session

     
     
            
    <property name="hibernate.current_session_context_class">thread</property>
  • 通过SessionFactory的getCurrentSession()方法获得Session

     
     
            
    Session session = sessionFactory.getCurrentSession();

    注意:通过getCurrentSession()方法获得的session,无需调用close方法释放资源。当事物提交或者回滚,会自动释放资源.

6.2Session获取方式的区别
  • 调用getCurrentSession()方法时,会判断当前线程中是否绑定了session。

    ​ 如果绑定了,直接返回线程中绑定的session

    ​ 如果没有绑定,先去创建一个session,然后讲session存储到当前线程中,再返回。

  • 调用openSession()方法时,只会创建一个新的session,且不会存储到当前线程。

  • 通过getCurrentSession()方法获得的session,无需调用close方法释放资源. 通过openSession()方法获得的session需要手动释放资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值