0 0

getCurrentSession openSession性能区别10倍怎么回事3

我做了一个测试
for (int i = 0; i < 10000; i++) {
进行10000次循环保存,。分别通过下面的方式来获得session 
getCurrentSession openSession

sessionFactory.getCurrentSession();

sessionFactory.openSession()

但是通过前者执行完上面的语句要130秒  ,而后者则是10几秒, 怎么回事,感觉效率挺慢的


而通过hibernateTemplate,后者jdbcTemplate,多只需要1,2秒。。请问这个是怎么回事
2012年5月17日 14:52

1个答案 按时间排序 按投票排序

0 0

getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭。

2012年5月24日 18:09

相关推荐

    SessionFactory.getCurrentSession与openSession的区别

    标题中的“SessionFactory.getCurrentSession与openSession的区别”是关于Hibernate框架中的两个关键操作,它们都是用于在Hibernate中获取数据库会话的。理解它们的区别对于优化数据访问性能和管理事务至关重要。 ...

    getCurrentSession 与 openSession() 的区别

    在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...

    新Hibernate SessionFactory().getCurrentSession()猫腻

    当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...

    [尚硅谷]_佟刚_Hibernate面试题分析

    8. getCurrentSession()和openSession()的区别: - getCurrentSession()会检查当前线程是否已有Session,若有则返回,若无则创建。 - openSession()方法总是创建一个新的Session。 - getCurrentSession()在事务...

    Spring视频教程(3)

    2. **编程式事务与OpenSession/GetCurrentSession的区别**: 编程式事务处理是手动管理事务边界,而OpenSession/GetCurrentSession模式则是在操作数据库时自动开启和关闭Session。这两者在事务管理和性能上有不同的...

    2020版Hibernate 12 道.pdf

    11. Hibernate中getCurrentSession和openSession的区别是什么? `getCurrentSession`是用于在已有的事务上下文中获取或创建Session,确保与当前事务的一致性。而`openSession`则是直接创建一个新的Session,不考虑...

    java 面试技术题汇总

    - `getCurrentSession()`和`openSession()`的区别:`getCurrentSession()`会绑定到当前线程,便于事务管理,而`openSession()`需要手动管理Session的生命周期。使用`getCurrentSession()`需要在配置文件中指定适当的...

    SSM SSH面试题整理

    - 区分getCurrentSession()与openSession()的使用场景,以及它们对于事务和性能的不同影响。 8. **Cascading和Inverse配置:** - Cascading和Inverse用于解决实体间关系的维护问题,有助于减少不必要的数据库操作...

    hibernate.jar包

    - 获取Session:通过SessionFactory的openSession()或getCurrentSession()获取Session实例。 - 开启事务:在Session上开始一个新的数据库事务。 - 对象操作:执行增删改查操作,如save()、update()、delete()、...

    hibernat框架学习

    - **OpenSession vs GetCurrentSession**: - **OpenSession**:每次调用都会创建新的Session。 - **GetCurrentSession**:根据当前线程返回已存在的Session,如果没有则新建一个。 #### 总结 Hibernate作为一种...

    SSH面试题

    其中,`openSession()`和`getCurrentSession()`是最常用的两个方法。`openSession()`创建一个新的`Session`,适用于多线程环境;而`getCurrentSession()`则返回当前线程绑定的`Session`,常用于事务管理中。 通过...

    hibernate的事务核并发

    1. **开启Session**:通过`SessionFactory`的`openSession()`方法创建一个`Session`对象。 2. **启动事务**:调用`Session`对象的`beginTransaction()`方法开始一个新的事务。 3. **执行业务逻辑**:在这一步中,...

    hibernate核心知识

    - `openSession()`:创建一个新的Session实例。 - `getCurrentSession()`:获取与当前线程绑定的Session。在一个线程中,多次调用`getCurrentSession()`会返回相同的Session。 5. **Session接口**:Session代表与...

    Java Hibernate4天学习笔记整理可用于提交作业

    通过SessionFactory.openSession()或getCurrentSession()方法获取Session实例。 五、持久化操作 1. 插入:使用Session的save()或saveOrUpdate()方法插入新记录。 2. 更新:调用Session的update()或saveOrUpdate()...

    hibernate-spring整合

    在Spring中,我们可以使用SessionFactory的openSession()或getCurrentSession()方法获取Session实例。 4. **事务管理**: Spring提供PlatformTransactionManager接口,可以用来管理数据库事务。在Hibernate整合中,...

    Hibernate说明文档.rar_ajax_hibernate

    Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); // set user properties... session.save(user); tx.commit(); session.close(); ``` #...

    Hibernate知识总结

    - `getCurrentSession()`: 从当前线程绑定的上下文中获取 Session,若无则创建,通常在容器管理的事务中使用,关闭由容器负责。 - `openSession()`: 每次调用都会创建新 Session,手动调用 `close()` 关闭,适用...

    开始冬眠_Hibernate教程

    - **缓存机制**:通过一级缓存和二级缓存提高数据访问性能。 - **数据库无关性**:能够轻松地在不同类型的数据库之间切换,减少因数据库变更带来的影响。 #### Hibernate配置文件详解 - **主配置文件**:`...

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    Session session = HibernateUtil.getSessionFactory().openSession(); SQLQuery sqlQuery = session.createSQLQuery("SELECT id, name FROM User WHERE age &gt; :age"); sqlQuery.setParameter("age", 18); ``` 在这...

Global site tag (gtag.js) - Google Analytics