`
bcc123hf
  • 浏览: 47563 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdbcTemplate和hibernateTemplate之一

阅读更多
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笔记

    spring的主要特性。 (1)降低组件之间的耦合度,实现软件各层之间的解耦...(5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate. (6)对主流的应用框架提供了集成支持。

    spring集成Hibernate

    本文主要讲解如何在Spring4.0.4下整合Hibernate4.3.6; 主要介绍了如下内容: 项目结构的规划; Spring MVC的配置和使用; Spring下整合Hibernate的具体过程;...jdbcTemplate和HibernateTemplate两种方式操作数据库;

    Spring入门

    5、 Spring提供的众多辅助类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate 6、 Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts2等,更便于应用的开发。

    Spring中文帮助文档

    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. 容器...

    Spring3.07+Hibernate+sturts1.3测试

    spring 没使用注解,全配置文件 hibernateTemplate,jdbcTemplate hibernate ORM

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    Spring控制Hibernate中的事务传播特性与隔离级别操作,通过利用spring和Hibernate的两个HibernateTemplate 和 jdbcTemplate类,实现数据的交互。

    Spring持久化模板总结

    总结对比了Spring对JDBCTemplate和SpringTemplate的整合使用方法,尤其JdbcDaoSupport和HibernateDaoSupport的使用方法

    struts2.3.x+spring3.1.x+hibernate3.6 demo

    十分抱歉,上次整合的是一个半成品,spring3.1和hibernate4.1目前为止我测试了,整合过程中有很多问题!关键问题有几个,第一个HibernateDaoSupport这个没有了,在使用hibernateTemplate的时候,报错误:java.lang....

    EOSS V1.0 企业运营支撑系统(基于RBAC原理的权限管理)

    封装hibernateTemplate和jdbcTemplate, 使用dispalytag做数据报表,可轻松导出查询出的所有Excel,多种实用工具类,统一的编码风格,完整的其于RBAC原理的权限管理系统,使你能其于用户,角色,权限的功能之上,...

    Web服务启动时自动加载Servlet,并读取数据库内容

    我操作数据库用的是spring的HibernateTemplate和JdbcTemplate,访问数据库是以bean注入的方式,在action里注入service的实现,读取数据库数据,其实现在的关键就是得到这个service的实例化对象,

    MyEclipse 6 Java 开发中文教程第十章

    214 &lt;br&gt;10.5.1 DataSource 和 JDBCTemplate开发... 214 &lt;br&gt;10.5.2 Hibernate 整合 Spring开发... 223 &lt;br&gt;10.5.2.1 创建项目,添加必要的开发功能... 223 &lt;br&gt;10.5.2.2 反向工程生成Spring整合...

    spring in action英文版

     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  ...

    《MyEclipse 6 Java 开发中文教程》前10章

    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.doc

    不用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 ...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    4、分表操作的支持:对于分表操作和常规的使用没有区别,只是指定分表规则,mybatis好像也可以通过制定参数实现分表处理,没搞清楚hibernate对这个是怎么处理的(hibernate好像是bean和表一对一绑定的)? ...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    开源框架 Spring Gossip

    cutting concerns,将 Crossing-cutting concerns 独立出来为一个物件,这样的特殊物件称之为 Aspect,Aspect-oriented programming 着重在 Aspect 的设计及与应用程式的缝合(Weave)。 &lt;br&gt;AOP 入门 AOP 的...

    Java Web程序设计教程

    14.2.4使用hibernatetemplate 281 14.2.5管理hibernate事务 282 14.3项目实战——学生成绩查询系统 283 本章小结 292 课后练习 293 第15章图书馆管理系统 294 15.1系统功能解析 294 15.2系统数据库设计 295 ...

Global site tag (gtag.js) - Google Analytics