zoukankan      html  css  js  c++  java
  • 《Spring 2.0技术手册》 读书笔记七Spring的DAO框架(3)JDBC事务管理

    Spring提供了编程式事务管理(programmatic transaction management)与声明式事务管理(declarative transaction management)。由于编程式事务管理会导致Spring框架侵入代码,而且变更复杂,故不赞成使用编程式事务管理。因此该篇笔记以声明式事务管理为主。

    事务是一组原子操作的工作单元,在数据库存取中,就是一组SQL指令,它们必须全部执行成功,因为某个原因未全部成功,则先前所有执行过的SQL指令都要被撤销。

    1. JDBC的事务管理

     

    2. Spring的事务管理

    Spring对JDBC的事务管理加以封装,关键是对org.springframework.transaction.PlatformTransactionManager接口的实现,DataSourceTransactionManager,HibernateTransactionManager等实现了此接口:

     

    其中,org.springframework.transaction.TransactionDefinition接口的实例定义了事务的隔离程度、传播行为、超时、只读等。

     

    org.springframework.transaction.TransactionStatus代表着一个新的事务发起或已经存在的事务,通过它可以控制事务的执行、设置状态。

     

    编程事务管理举例:

     

    声明事务管理:

    声明式事务管理依赖它的AOP框架,使用它只需在定义文件中进行配置,事务管理不会侵入所开发的组件,而且便于修改。简单的Bean定义文件配置如下:

     

    transactionManager、userDAO使用同一个DataSource,在org.springframework.transaction.interceptor.TransactionProxyFactoryBean代理对象中设置被代理接口、被代理目标实例、事务管理器以及事务属性。这样事务管理会自动介入指定的方法前后。如上,userDAO中以insert开头的方法都会被纳入事务管理,即方法执行过程中发生错误,则方法中所有先前的操作都自动撤回,否则正常提交。

    事务属性可以在TransactionDefinition接口中找到。对于目标方法可以加上多个事务属性定义,中间用","隔开。

    这样配置后,就可以正常使用UserDAO了,在UserDAO类中不需要增加事务管理代码。即

    IUserDAO dao=(IUserDAO)context.getBean("userDAOProxy");dao.insert(user);

    也可以设置单独的Interceptor,如下:

     

    总结:Spring的学习笔记就到此结束了,基本内容概括的差不多了。随着学习和应用,会对Spring进行深层的补充和理解。

  • 相关阅读:
    安装图形化界面
    cemtos安装python
    traceback说明
    python常用魔法函数
    python上传文件接口
    文件上传接口
    MongoDB安装与使用
    解决macOS系统向有跳板机的服务器传文件
    mac终端命令sftp
    linux下mysql服务安装
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982102.html
Copyright © 2011-2022 走看看