Spring--->声明式事务

回顾Mysql事务

  1. 原子性(要么全部完成,要么全部不起作用)
  2. 隔离性(操作同一个数据时,每一个事务应该隔离起来防止数据损坏)
  3. 持久性(事务一旦被提交就永久保存在服务器上)
  4. 一致性(所有事务动作全部完成,事务就要被提交,事务和资源保持一种满足业务规则的一致性)

 Spring 接管事务

注册beans

1、头文件约束导入

xmlns:tx="http://www.springframework.org/schema/tx" 

http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd

2、注册bean

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

3、配置事务相关通知

<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
   <tx:attributes>
       <!--配置哪些方法使用什么样的事务,配置事务的传播特性-->
       <tx:method name="add" propagation="REQUIRED"/>
       <tx:method name="delete" propagation="REQUIRED"/>
       <tx:method name="update" propagation="REQUIRED"/>
       <tx:method name="search*" propagation="REQUIRED"/>
       <tx:method name="get" read-only="true"/>
       <tx:method name="*" propagation="REQUIRED"/>
   </tx:attributes>
</tx:advice>

Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大多数的情况。

4、配置切入点

<aop:config>
        <aop:pointcut id="txPointCut" expression="execution(* com.xian.Mapper.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"></aop:advisor>
    </aop:config>

5、测试

 public void Test01(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserMapper userDao = (UserMapper) context.getBean("userDao");
        List<User> user = userDao.getUser();
        for (User user1 : user) {
            System.out.println(user1);
        }
    }

事务的重要性

  • 如果不配置,就需要我们手动提交控制事务;

  • 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎!

 

上一篇:Spring + mybatis 整合


下一篇:Java静态代理模式