-
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
相关推荐
标题中的“SessionFactory.getCurrentSession与openSession的区别”是关于Hibernate框架中的两个关键操作,它们都是用于在Hibernate中获取数据库会话的。理解它们的区别对于优化数据访问性能和管理事务至关重要。 ...
在Java的Hibernate框架中,`getCurrentSession()` 和 `openSession()` 都是用于获取与数据库交互的Session对象,但它们之间存在显著的区别。理解这些差异对于优化数据访问性能和管理事务至关重要。 首先,`...
当我们调用SessionFactory().getCurrentSession()时,Hibernate会为我们提供一个已存在的或者新创建的Session实例,这个行为与直接调用SessionFactory.openSession()有所不同。`getCurrentSession()`方法旨在支持...
8. getCurrentSession()和openSession()的区别: - getCurrentSession()会检查当前线程是否已有Session,若有则返回,若无则创建。 - openSession()方法总是创建一个新的Session。 - getCurrentSession()在事务...
2. **编程式事务与OpenSession/GetCurrentSession的区别**: 编程式事务处理是手动管理事务边界,而OpenSession/GetCurrentSession模式则是在操作数据库时自动开启和关闭Session。这两者在事务管理和性能上有不同的...
11. Hibernate中getCurrentSession和openSession的区别是什么? `getCurrentSession`是用于在已有的事务上下文中获取或创建Session,确保与当前事务的一致性。而`openSession`则是直接创建一个新的Session,不考虑...
- `getCurrentSession()`和`openSession()`的区别:`getCurrentSession()`会绑定到当前线程,便于事务管理,而`openSession()`需要手动管理Session的生命周期。使用`getCurrentSession()`需要在配置文件中指定适当的...
- 区分getCurrentSession()与openSession()的使用场景,以及它们对于事务和性能的不同影响。 8. **Cascading和Inverse配置:** - Cascading和Inverse用于解决实体间关系的维护问题,有助于减少不必要的数据库操作...
- 获取Session:通过SessionFactory的openSession()或getCurrentSession()获取Session实例。 - 开启事务:在Session上开始一个新的数据库事务。 - 对象操作:执行增删改查操作,如save()、update()、delete()、...
- **OpenSession vs GetCurrentSession**: - **OpenSession**:每次调用都会创建新的Session。 - **GetCurrentSession**:根据当前线程返回已存在的Session,如果没有则新建一个。 #### 总结 Hibernate作为一种...
其中,`openSession()`和`getCurrentSession()`是最常用的两个方法。`openSession()`创建一个新的`Session`,适用于多线程环境;而`getCurrentSession()`则返回当前线程绑定的`Session`,常用于事务管理中。 通过...
1. **开启Session**:通过`SessionFactory`的`openSession()`方法创建一个`Session`对象。 2. **启动事务**:调用`Session`对象的`beginTransaction()`方法开始一个新的事务。 3. **执行业务逻辑**:在这一步中,...
- `openSession()`:创建一个新的Session实例。 - `getCurrentSession()`:获取与当前线程绑定的Session。在一个线程中,多次调用`getCurrentSession()`会返回相同的Session。 5. **Session接口**:Session代表与...
通过SessionFactory.openSession()或getCurrentSession()方法获取Session实例。 五、持久化操作 1. 插入:使用Session的save()或saveOrUpdate()方法插入新记录。 2. 更新:调用Session的update()或saveOrUpdate()...
在Spring中,我们可以使用SessionFactory的openSession()或getCurrentSession()方法获取Session实例。 4. **事务管理**: Spring提供PlatformTransactionManager接口,可以用来管理数据库事务。在Hibernate整合中,...
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = new User(); // set user properties... session.save(user); tx.commit(); session.close(); ``` #...
- `getCurrentSession()`: 从当前线程绑定的上下文中获取 Session,若无则创建,通常在容器管理的事务中使用,关闭由容器负责。 - `openSession()`: 每次调用都会创建新 Session,手动调用 `close()` 关闭,适用...
- **缓存机制**:通过一级缓存和二级缓存提高数据访问性能。 - **数据库无关性**:能够轻松地在不同类型的数据库之间切换,减少因数据库变更带来的影响。 #### Hibernate配置文件详解 - **主配置文件**:`...
Session session = HibernateUtil.getSessionFactory().openSession(); SQLQuery sqlQuery = session.createSQLQuery("SELECT id, name FROM User WHERE age > :age"); sqlQuery.setParameter("age", 18); ``` 在这...