Spring框架的事务管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011301372/article/details/81538487

Spring框架的事务管理相关的类和API

  • PlatformTransactionManager接口
    • 平台事务管理器。(真正管理事务的类)。该接口有具体的实现类,根据不同的持久层框架,需要选择不同的实现类。
  • TransactionDefinition接口
    • 事务定义信息(事务的隔离级别,传播行为,超时,只读)
  • TransactionStatus接口
    • 事务的状态
  • 总结:上述对象之间的关系:平台事务管理器真正管理事务对象,根据事务定义的信息TransactionDefinition进行事务管理,在管理事务中产生一些状态,将状态记录到TransactionStatus中

PlatformTransactionManager 接口中实现类和常用的方法

  • 接口的实现类
    • 如果使用的Spring的JDBC模板或者MyBatis框架,需要选择DataSourceTransactionManager实现类
    • 如果使用的是Hibernate的框架,需要选择HibernateTransactionManager实现类
  • 该接口的常用方法
    • void commit(TransacionStatus status)
    • TransactionStatus getTransaction(TransactionDefinition definition)
    • void rollback(TransactionStatus status)

TransactionDefinition

  • 事务隔离级别的常量
    • static int ISOLATION_DEFAULT—–采用数据库的默认隔离级别
    • static int ISOLATION_READ_UNCOMMOTTED
    • static int ISOLATION_READ_COMMITTED
    • static int ISOLATION_REPEATABLE_READ
    • static int ISOLATION_SERIALIZABLE
  • 事务的传播行为常量
    • 事务的传播行为:解决的是业务层之间的方法调用。
    • PROPAGATION_REQUIRED
      • A中有事务,使用A中的事务,如果没有,B就会开启一个新的事务,将A包含进来(保证A,B在同一个事务中),默认值。
    • PROPAGATION_SUPPORTS
      • A中有事务,使用A中的事务,如果A中没有事务,那么B也不使用事务。
    • PROPAGATION_MANDATORY
      • A中有事务,使用A中的事务,如果A中没有事务,就抛出异常。

    • PROPAGATION_REQUIRES_NEW
      • A中有事务,将A中的事务挂起,B创建一个新的事务(保证A,B没有在一个事务中)
    • PROPAGATION_NOT_SUPPORTED
      • A中有事务,将A中的事务挂起
    • PROPAGATION_NEVER
      • A中有事务,抛出异常

    • PROPAGATION_NESTED
    • 嵌套事务,当A执行之后,就会在这个位置设置一个保存点,如果B没有问题,执行通过。如果B出现异常,运行客户根据需求回滚(选择回滚到保存点或者是最初始状态)

事务管理转账案例

简化开发,以后DAO可以继承JdbcDaoSupprot类

步骤一:创建web工程,引入需要的jar包

  • IOC的6个包
  • AOP的4个包
  • c3p0的1个包
  • MySQL的驱动包
  • JDBC的目标2个包

步骤二:引入配置文件

  • 引入配置文件
    • 引入log4j.properties
    • 引入applicationContext.xml
      *<!--配置c3p0连接池-->
      <bean id = "dataSource" class="com.mchange.v2.c3p0.ComboPooledData
      Source">
      <property name ="driverClass" value="com.mysql.jdbc.Driver"/>
      <property name="jdbcUrl" value="jdbc:mysql:///spring_day03"/>
      <property name="user" value="root"/>
      <property name="password" vlaue="root"/>
      </bean>
      <!--配置JDBC模板类-->
      <bean id = "jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
      <property name="dataSource" ref="dataSource"/>
      </bean>

步骤三:创建对应的包结构和类

  • com.xd.demo1
    • AccountService
    • AccountServiceImpl
    • AccountDaoImpl

步骤四:引入Spring的配置文件,将类配置到Spring中

<bean id="accountService" class="com.xd.demo1.AccountServiceImpl">
</bean>
<bean id = "accountDao" class="com.xd.demo1.AccountDaoImpl">
</bean>

步骤五:在业务层注入DAO,在DAO中注入JDBC模板(简化开发,以后DAO可以继承JdbcDaoSupport类)

<bean id ="accountService" class="com.xd.demo1.AccountServiceImpl">
    <property name="accountDao" ref="accountDao"/>
</bean>

<bean id ="accountDao" class="com.xd.demo1.AccountDaoImpl">
    <property name="dataSource" ref="dataSource"/>
</bean>

步骤六:编写DAO和Service中的方法

public class AccountDaoImpl extends JdbcDaoSource implements AccountDao{
    public void outMoney(String out,double money){
        this.getJdbcTemplate().update("update t_account set money=money = ? where name=?",money,out);
    }
    public void inMoney(String in,double money){
        this.getjdbcTemplate().update("update t_account set money = money+ ? where name=?" ,money,in)
    }
}

步骤七:编写测试程序

这里写代码片

猜你喜欢

转载自blog.csdn.net/u011301372/article/details/81538487