• 课时: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注解的一些其他的属性

     

  • 相关阅读:
    Android中onBackPressed()的使用
    Python初次学习
    svn Mac下面无法更新png
    UIView的layoutSubviews和drawRect
    "_deflate", referenced from: -[NSData(NSDataAdditions) gzipDeflate] in NSDataAdditions.o
    Error12
    pods安装
    xib为view添加边框
    这些机型将被淘汰
    Development cannot be enabled while your device is locked.
  • 原文地址:https://www.cnblogs.com/thisHBZ/p/12511496.html
Copyright © 2020-2023  润新知