Hibernate中将session与本地线程绑定分析

原文:https://blog.csdn.net/Marvel__Dead/article/details/61654297 

 

为什么要把Session与本地线程绑定?

openSession():

总是创建一个新的session对象
你需要去明确的关闭session对象
在单线程环境它比getCurrentSession()更慢
你也不需要去配置任何属性,你就能够使用这个方法


getCurrentSession():

如果session不存在,它将创建一个新的session,否则在当前hibernate环境中使用同一个session
你不需要去关闭session对象,它将自动被hibernate内部机制关闭
在单线程环境它比opensession更快
你需要去配置中附加hibernate.current_session_context_class这个属性,才能够调用getCurrentSession()方法否则将会抛出异常
所以在这里openSession()和getCurrentSession()的主要区别就是快和慢的区别。
 

  • 我们每次通过openSession()打开的session都是一次数据库连接。

  • session类似于jdbc的connection,它的底层依赖于我们web阶段学过的threadLocal

  • Hibernate已经帮我们实现了session与本地线程绑定

 

我们怎样获取与本地线程绑定的session:

首先在hibernate核心配置文件中配置
调用sessionFactory里面的方法得到
//在hibernate.cfg.xml中配置,也就是Hibernate核心配置文件中。配置部位是在第二部分。

<property name="hibernate.current_session_context_class">thread</property>


//其中,上面的值一共有三个,但是我们一般只用thread,即Session对象与本地线程进行绑定。

- thread:Session对象的生命周期与本地线程绑定
- jta:Session对象的生命周期与JTA事务绑定
- managed:Hibernate委托程序来管理Session对象的生命周期
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值