Hibernate——openSession和getCurrentSession区别

本文详细探讨了在Hibernate框架中,openSession和getCurrentSession方法之间的区别,包括它们如何通过CurrentSessionContext进行上下文管理,以及getCurrentSession内部实现的流程。通过分析线程局部变量的使用,解释了如何确保线程安全地获取和管理session对象。

openSession和getCurrentSession区别:

深入讨论:
在SessionFactory启动的时候,Hibernate会根据配置创建相应的CurrentSessionContext
在getCurrentSession()被调用的时候,实际上执行的方法是:CurrentSessionContext.currentSession()
在currentSession()执行时,如果当前Session为空,currentSession会调用SessionFactory的openSession


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* private static SessionFactory sessionFactory = null;
* /*使用线程局部模式*/
* private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
* static{
* sessionFactory = new Configuration().configure().buildSessionFactory();
* }
* /**
* * 获取和线程关联的session
* * @return
* */
* public static Session getCurrentSession(){
* Session session = threadLocal.get();
* /*判断是否得到*/
* if(session==null || !session.isOpen()){
* session = sessionFactory.openSession();
* //把session对象设置到threadLocal,相当于该session和线程绑定
* threadLocal.set(session);
* }
* return session;
* }
* /**
* * 获取全新的session
* * @return
* */
* public static Session openSession(){
* return sessionFactory.openSession();
* }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值