jdbcTemplate原理:
我们都知道在使用jdbc连接数据库的时候:
conn=dataSource.getConnection();
stmt=con.createStatement();
stmt.executeUpdate(...);
这就会直接保存到数据库,因为默认下conn.setAutoCommit(true),
如果我们要手动则,conn.setAutoCommit(false)就是了.
spring jdbcTemplate中,我们一般直接向我们的dao层注入jdbcTemplate,再运行jdbcTemplate.update()也会把数据保存到数据库中去.因为他底层使用的是jdbc所以默认下事务是自动保存的.
如果dao一个方法中有两名,jdbcTemaplte.update(1),jdbcTemplate.update(2),1和2没有关系,如果1保存成功,2失败则1还是成功,因为1运行所会自己保存.我们一般要的是1,2同时成功,同时失败.
我们来看一下,spring中怎么实现,办法我有两个,一在代码是写如:
配置事务管理
<beand id="trnasactionManager" class="org.springframework.jdbc.dataSource.DataSourceTranactionManager">
<property name="dataSource"><reflocal="dataSource" /></property>
</bean>
我们在我们的dao注入dataSource和transactionManager就是了
假如insert()方法就是我们用来保存数据的
public void insert(){
TransactionTemplate tt=new TransactionTemplate(transactionManager);
tt.execute(new transactionCallback(){
public object doIntransactioan(TransactionStatus status){
JdbcTemplate jt=new JdbcTemplate(dataSource);
jt.update(1);
jt.update(2);
return null;
} });//引入springGuide书中的例子
}
那么事务是什么时候开启的呢?
我们可以查看transactionTemplate源代码:看到execute方法中有
public Object execute(TransactionCallback action) throws TransactionException {
if (this.transactionManager instanceof CallbackPreferringPlatformTransactionManager) {
return ((CallbackPreferringPlatformTransactionManager) this.transactionManager).execute(this, action);
}
else {
TransactionStatus status = this.transactionManager.getTransaction(this);
Object result = null;
try {
result = action.doInTransaction(status);
}
catch (RuntimeException ex) {
// Transactional code threw application exception -> rollback
rollbackOnException(status, ex);
throw ex;
}
catch (Error err) {
// Transactional code threw error -> rollback
rollbackOnException(status, err);
throw err;
}
this.transactionManager.commit(status);
return result;
}
}
看到TransactionStatus status = this.transactionManager.getTransaction(this);
我们再去查看transactionManager,我们看dataSourceTransactionManager,发现,他继承 AbstractPlatformTransactionManager,而aptm它的getTransaction这里配置一些事务,调用了doBegin(transaction, definition);这就开启事务,
当TransactionTemplate中execute最后执行的是this.transactionManager.commit(status);事务提交.
办法二,配置参数
配置
<bean id="userDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
注入 trnsactionManger target=你的Dao
transactionAttributes
<prop key="insert*">propagation_required</prop>
</bean>//我这是简单具体的配置没有写,引入springGuide书中
而我们的dao只在注入dataSource就是了,
public void insert(){
JdbcTempalte jt=new JdbcTemplate(dataSource);
jt.update(1);
jt.update(2);
}
其实两种方法是一样的.只不过,在配置用户中被除数trndactionProxyFactoryBean拦截了,但具体实现是和一一样的.
分享到:
相关推荐
Spring提供了多种持久化模板,如JdbcTemplate和HibernateTemplate,以简化数据库操作并减少代码中的样板代码。这两个模板都是Spring JDBC模块的一部分,用于增强对SQL数据库的访问能力。本文将深入探讨Spring对...
本文主要讲解如何在Spring4.0.4下整合Hibernate4.3.6; 主要介绍了如下内容: 项目结构的规划; Spring MVC的配置和使用; Spring下整合Hibernate的具体过程;...jdbcTemplate和HibernateTemplate两种方式操作数据库;
5、 Spring提供的众多辅助类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate 6、 Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts2等,更便于应用的开发。
4. CRUD操作的示例:展示了如何通过Spring的JdbcTemplate或HibernateTemplate来执行创建、查询、更新和删除数据库记录的代码示例。 5. 整合SSH:描述了如何将这三个框架集成在一起,实现一个完整的Web应用程序。 ...
5. 使用Spring的JdbcTemplate或HibernateTemplate执行数据库查询和更新操作。 6. 测试和调试整合后的应用,确保各个组件正常工作。 通过这个实战项目,你将掌握Java EE开发中的核心技术,并能构建出符合企业级标准...
8. **JdbcTemplate与HibernateTemplate和事务管理** - **JdbcTemplate**:提供SQL操作的抽象,简化JDBC的使用。 - **HibernateTemplate**:是Spring对Hibernate的封装,简化ORM操作。 - **事务管理**:Spring支持...
例如,它们可能包括了保存(insert)、更新(update)、删除(delete)和查询(select)数据的方法,这些方法可能是基于JdbcTemplate或者HibernateTemplate实现的。 JdbcTemplate是Spring提供的一个数据库访问组件...
3. **创建JdbcTemplate对象**:在Spring配置文件中定义数据源和JdbcTemplate bean。数据源负责连接数据库,而JdbcTemplate则用于执行SQL语句。 ```xml <!-- 在Spring配置文件中定义数据源 --> <!--...
例如,Spring的JdbcTemplate和HibernateTemplate提供了模板方法,用于简化数据库操作,减少了大量重复的代码。 **集成支持** Spring 能够很好地与许多流行框架集成,如Struts、Hibernate、JSF等。这使得开发者可以...
Spring的JdbcTemplate和HibernateTemplate是两个常用的工具,它们简化了数据库操作,使得开发者可以避免直接编写大量的JDBC代码。Spring还支持使用Hibernate的SessionFactory和Session接口,通过声明式事务管理,...
Spring 可以通过工厂方法或 JdbcTemplate、HibernateTemplate 提供的模板方法来获取 Session。 6. **Service 层设计**:Service 层是业务逻辑的核心,通常会注入 DAO 实例并调用其方法来完成业务处理。Service 层...
此外,Spring的JdbcTemplate和HibernateTemplate还可以用于实现数据库操作的模板方法模式,提高了代码的可读性和可重用性。 总的来说,Spring 2.5 和 Hibernate 的结合为Java开发人员提供了一套强大的工具,用于...
它提供了模板类,如JdbcTemplate和HibernateTemplate,使数据库操作更加简单,同时保持了与业务逻辑的解耦。 另外,Spring2.0在MVC框架方面也有所提升,它引入了DispatcherServlet,作为Web应用的前端控制器,负责...
在Spring框架中,数据库访问是核心功能之一,它提供了丰富的工具和API来简化与数据库的交互。本篇文章将深入探讨Spring中的数据库异常处理机制,帮助开发者更好地理解和处理在数据库操作中可能遇到的问题。 首先,...
首先,我们需要了解Spring的JdbcTemplate和HibernateTemplate,它们是Spring提供的两种基础数据访问模板。JdbcTemplate简化了SQL操作,提供了事务管理、异常翻译等功能,而HibernateTemplate则基于ORM(对象关系映射...
在Spring中,JdbcTemplate和HibernateTemplate就是模板方法模式的典型应用。它们为数据库操作提供了一个通用模板,包括打开连接、设置事务、执行SQL、提交事务和关闭连接等步骤。子类可以通过重写特定方法来定制自己...
在源码中,DataSourceTransactionManager 和 JpaTransactionManager 是对应的事务管理器,而 JdbcTemplate 和 HibernateTemplate 是简化数据库操作的工具类。 5. **Spring MVC** Spring MVC 是用于构建 Web 应用的...
源码中,我们可以看到Spring如何简化这些复杂库的使用,比如JdbcTemplate和HibernateTemplate,它们通过抽象和异常处理提高了代码的可读性和稳定性。 5. Web模块:Spring MVC是Spring框架的Web部分,用于构建...
Spring2.0版本增加了对JSR-250注解的支持,提供了数据访问抽象,如JdbcTemplate和HibernateTemplate,还有Spring MVC,这是一个用于构建Web应用程序的MVC框架。Spring的这些特性使得开发者可以轻松地管理对象的生命...
在源码中,可以看到DataSource、JdbcTemplate和HibernateTemplate等类的实现。 5. **MVC框架**:Spring MVC提供了一个模型-视图-控制器架构,用于构建Web应用程序。DispatcherServlet、Controller接口和...