课时:5 使用注解实现声明式事务

.1)使用注解实现声明式事务

  1.目标:通过事务 使以下方法 要么全部成功 要么全部失败

public void addStudent(){
    //增加班级
    //增加学生
    //crud
}

  2.导入相关的jar包

 <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>
<!--mysql驱动包-->
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>
<!--连接池使用数据源-->
<dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
<!--连接池-->
<!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
    <dependency>
      <groupId>commons-pool</groupId>
      <artifactId>commons-pool</artifactId>
      <version>1.6</version>
    </dependency>

还有几个spring自带的
spring-jdbc-4.3.9.RELEASE.jar
spring-tx-4.3.9.RELEASE.jar

  3.编写配置文件

    3.1 增加事务tx的命名空间

xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

    3.2 增加对事务的支持

 <tx:annotation-driven transaction-manager="txManager"/>

    3.2.1 配置事务管理器

 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

      3.2.1.1 配置数据源相关

<!--    配置数据库相关-事务-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!--        配置驱动包-->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<!--        配置连接地址-->
        <property name="url" value="jdbc:mysql://localhost:3306/ssm"></property>
<!--        配置用户名-->
        <property name="username" value="root"></property>
<!--        配置密码-->
        <property name="password" value="root"></property>
<!--        最大连接时间-->
        <property name="maxActive" value="10"></property>
<!--        最大空闲时间-->
        <property name="maxIdle" value="6"></property>
    </bean>

  4.将需要 成为事务的方法 前增加注解:

 @Transactional(readOnly = false,propagation = Propagation.REQUIRED)
    @Override
    public void addStudent(Student student) {
        iStudentDao.addStudent(new Student());
    }

    4.1 readOnly的详细说明

 

 

     4.2 propagation事务传播行为的详细说明

    4.2.1 @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)                                4.2.2@Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启事务                                                                 4.2.3@Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务  

    4.2.4@Transactional(propagation=Propagation.MANDATORY) :必须在一个已有的事务中执行,否则抛出异常

    4.2.5@Transactional(propagation=Propagation.NEVER) :必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)                               4.2.6@Transactional(propagation=Propagation.SUPPORTS) :如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.

  5.Transactional注解的一些其他的属性

 

 

 

posted @ 2020-03-17 16:25  何邦柱  阅读(166)  评论(0编辑  收藏  举报