hibernatetemplate自动事务
在使用hibernatetemplate的时候,不配置spring事务 也能对数据库进行CRUD。
刚开始好奇怪,在过去不配置事务是不能对数据库进行CRUD的,而为什么在现项目中把所有的事务配置xml都删除后,还是可以对数据库进行操作。
为什么hibernatetemplate还是依然可以对数据库进行操作呢,
其实在hibernatetemplate中 是手动的hibernate事务。
首先是HibernateTemplate的定义:
- public class HibernateTemplate extends HibernateAccessor implements HibernateOperations { ... }
继承HibernateAccessor,我们再来看看HibernateAccessor,HibernateAccessor里最重要的就是设置SessionFactory
再看HibernateOperations接口,HibernateOperations里定义了我们常用的get(...)、find(...)、save(...)等操作,
其中最重要的就是Object execute(HibernateCallback action) throws DataAccessException;
现在我们又多了一个接口:HibernateCallback,HibernateCallback回调接口,它里面只有一个方法的定义,
Object doInHibernate(Session session) throws HibernateException, SQLException;
基本上相关联的比较重要的东东我们提到了。
- public Object execute(HibernateCallback action) throws DataAccessException {
-
- 先通过SessionFactory获取到Hibernate的Session对象
-
- 执行HibernateCallback的对象的doInHibernate(...)的方法
- 看看上面我们的“分页查询Info表”的方法
-
- 关闭Session
-
- 返回查询结果
-
- }
HibernateTemplate中的get(...)、find(...)、save(...)等方法,只不过是spring事先为我们实现了
HibernateCallback接口而已
分享到:
相关推荐
`HibernateTemplate`内部处理了事务管理和异常转换,使得开发者可以专注于业务逻辑,而不是底层的数据库操作。 接下来,关于代码生成,它是一种自动化编程技术。在本例中,可能是通过一个工具或者脚本来实现,根据...
3. **事务管理**:虽然HibernateTemplate简化了事务管理,但在复杂的应用场景下仍然需要仔细设计事务边界。 #### 六、总结 通过上述介绍可以看出,HibernateTemplate为开发者提供了一个高效、简洁的方式来操作...
1. **事务管理**:`HibernateTemplate`提供了内置的事务管理机制,开发者无需手动开启和关闭事务,这大大减少了出错的可能性,并且使得代码更加简洁明了。 2. **Session管理**:传统的Hibernate使用方式通常需要显式...
2. **事务管理**:通过`HibernateTemplate`可以方便地处理事务边界问题,实现细粒度的事务控制。 3. **批处理操作**:支持批量执行SQL语句,优化数据库访问性能。 4. **自定义查询**:支持HQL(Hibernate Query ...
如果`doInHibernate`方法中发生了异常,则`HibernateTemplate`会自动回滚事务;如果没有异常,则提交事务。 #### 四、示例代码分析 以下是一段示例代码,旨在演示如何使用`HibernateTemplate`进行多个数据库操作,...
1. **事务管理**:HibernateTemplate自动管理Hibernate Session和Transaction,确保在事务边界内的操作原子性和一致性。无需手动开启和关闭Session,也不用关心事务的回滚和提交。 2. **异常转换**:它将Hibernate...
问题的关键在于,`HibernateTemplate`并不自动管理事务边界。在Hibernate中,当调用`Session`的`beginTransaction`方法时,实际上创建了一个JDBC级别的事务。但是,如果在`HibernateTemplate`的`execute`方法中手动...
1. **事务管理**:HibernateTemplate自动处理事务的开启、提交、回滚,开发者无需手动管理事务边界。 2. **简化操作**:它封装了Session的常用方法,如删除(delete)、保存(save或saveOrUpdate)、更新(update)...
在这个例子中,如果在事务回调方法中抛出未检查异常(继承自RuntimeException的异常)或者受检异常(需要在方法签名中声明的异常),那么事务将会自动回滚。否则,当事务回调方法正常结束时,事务会自动提交。 然而...
5. 自动事务管理: Spring在某些特定场景下,如JdbcTemplate和HibernateTemplate,会自动开启和提交事务,无需显式声明。这是基于模板方法的设计模式,简化了数据访问层的代码。 每种事务管理方法都有其适用场景,...
`HibernateTemplate`的优点在于它能自动处理事务、异常和Session管理,使得代码更简洁,降低了出错的可能性。同时,它提供的方法可以直接处理集合操作,简化了开发流程。因此,在SSH或SSH2框架中,使用`...
AOP代理可以在方法调用前后自动执行事务相关的操作,如开启、提交、回滚事务,大大提高了代码的整洁度。 3. **整合Spring与Hibernate** 整合Spring和Hibernate主要涉及以下步骤: - 引入依赖:确保项目中包含了...
Spring整合Hibernate基于HibernateTemplate的方式,极大地简化了数据库操作,同时也让事务管理和代码的编写变得更加规范和高效。在实际项目中,可以根据需求进一步配置和优化,比如使用JPA的...
5. **优化**: 为了提高性能,可以使用`HibernateTemplate`或`HibernateDaoSupport`,它们提供了事务安全的CRUD操作。 总之,Spring的声明式事务管理简化了事务处理,降低了代码的复杂性,而Hibernate的编程式事务...
延迟加载允许在需要时才加载关联的对象,而声明式事务处理则使得事务管理更加自动化,无需在代码中显式处理。 在Spring与Hibernate整合时,延迟加载功能可能会遇到问题,因为Spring通过HibernateTemplate或JPA的...
在JDBC中,事务是基于Connection对象进行管理的,通常需要手动调用`setAutoCommit(false)`来禁用自动提交,然后在适当的时候调用`commit()`或`rollback()`来完成事务操作。这种方式需要开发者显式地控制事务的边界,...
如果方法内的任何操作抛出异常,Spring会自动回滚事务;如果没有异常,事务会在方法结束时被提交。 接下来,我们来看看Hibernate 4。Hibernate是一个强大的ORM(对象关系映射)框架,它允许开发者以面向对象的方式...
例如,在Service层的方法上添加此注解,Spring会在方法执行前后自动处理事务的开启和提交,如果方法中发生异常,Spring会回滚事务。这种方式大大简化了代码,避免了手动管理事务的复杂性。同时,Spring还提供了编程...
### Spring 事务配置详解 #### 一、Spring 事务配置概览 ...无论是使用 JDBCTemplate 还是 HibernateTemplate,Spring 都能够提供强大的事务支持。对于开发人员来说,理解这些基本的概念和配置方式是非常重要的。
在资源管理方面,Spring通过高层API如`JDBCTemplate`和`HibernateTemplate`简化了数据库操作,它们负责资源的创建、管理和事务同步。这些模板类封装了原始的JDBC或ORM API,使得开发者可以专注于业务逻辑,而不必...