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的主要特性。 (1)降低组件之间的耦合度,实现软件各层之间的解耦...(5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate. (6)对主流的应用框架提供了集成支持。
本文主要讲解如何在Spring4.0.4下整合Hibernate4.3.6; 主要介绍了如下内容: 项目结构的规划; Spring MVC的配置和使用; Spring下整合Hibernate的具体过程;...jdbcTemplate和HibernateTemplate两种方式操作数据库;
5、 Spring提供的众多辅助类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate 6、 Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts2等,更便于应用的开发。
12.2.3. The HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器...
spring 没使用注解,全配置文件 hibernateTemplate,jdbcTemplate hibernate ORM
Spring控制Hibernate中的事务传播特性与隔离级别操作,通过利用spring和Hibernate的两个HibernateTemplate 和 jdbcTemplate类,实现数据的交互。
总结对比了Spring对JDBCTemplate和SpringTemplate的整合使用方法,尤其JdbcDaoSupport和HibernateDaoSupport的使用方法
十分抱歉,上次整合的是一个半成品,spring3.1和hibernate4.1目前为止我测试了,整合过程中有很多问题!关键问题有几个,第一个HibernateDaoSupport这个没有了,在使用hibernateTemplate的时候,报错误:java.lang....
封装hibernateTemplate和jdbcTemplate, 使用dispalytag做数据报表,可轻松导出查询出的所有Excel,多种实用工具类,统一的编码风格,完整的其于RBAC原理的权限管理系统,使你能其于用户,角色,权限的功能之上,...
我操作数据库用的是spring的HibernateTemplate和JdbcTemplate,访问数据库是以bean注入的方式,在action里注入service的实现,读取数据库数据,其实现在的关键就是得到这个service的实例化对象,
214 <br>10.5.1 DataSource 和 JDBCTemplate开发... 214 <br>10.5.2 Hibernate 整合 Spring开发... 223 <br>10.5.2.1 创建项目,添加必要的开发功能... 223 <br>10.5.2.2 反向工程生成Spring整合...
4.4.3 用HibernateTemplate访问Hibernate 4.4.4 HibernateDaoSupport的子类 4.5 Spring和JDO 4.5.1 配置JDO 4.5.2 用JdoTemplate访问数据库 4.6 Spring和iBATIS 4.6.1 配置SQL Map ...
10.5.1 DataSource 和 JDBCTemplate开发 227 10.5.2 Hibernate 整合 Spring开发 236 10.5.2.1 创建项目,添加必要的开发功能 236 10.5.2.2 反向工程生成Spring整合Hibernate的DAO 238 10.5.2.3 用Spring 1.2 的事务...
不用spring异常通知,另一种处理异常 96 4.2.2.2Aop注解形式(了解) 99 注解注入拓展: 103 5 Spring数据库 106 5.1 Spring+JDBC 106 5.1.1 Jdbc编程特点 106 5.1.2引入DataSource 106 5.1.3 核心类JdbcTemplate ...
4、分表操作的支持:对于分表操作和常规的使用没有区别,只是指定分表规则,mybatis好像也可以通过制定参数实现分表处理,没搞清楚hibernate对这个是怎么处理的(hibernate好像是bean和表一对一绑定的)? ...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
cutting concerns,将 Crossing-cutting concerns 独立出来为一个物件,这样的特殊物件称之为 Aspect,Aspect-oriented programming 着重在 Aspect 的设计及与应用程式的缝合(Weave)。 <br>AOP 入门 AOP 的...
14.2.4使用hibernatetemplate 281 14.2.5管理hibernate事务 282 14.3项目实战——学生成绩查询系统 283 本章小结 292 课后练习 293 第15章图书馆管理系统 294 15.1系统功能解析 294 15.2系统数据库设计 295 ...