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与本地线程绑定

扫描二维码关注公众号,回复: 4848794 查看本文章

我们怎样获取与本地线程绑定的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对象的生命周期
 

猜你喜欢

转载自blog.csdn.net/Tommy5553/article/details/84727808