Spring框架学习第二天总结(2)

一、Spring的事务管理

  1. 事务的概念:
    事务管理对于企业应用而言至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至
    于破坏后台数据的完整性。就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然
    出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以
    保证用户和银行的利益都不受损失。
    简单来说:事务是一系列的动作,一旦其中有一个动作出现错误,必须全部回滚,系统将事务中对数据库的所有已完
    成的操作全部撤消,滚回到事务开始的状态,避免出现由于数据不一致而导致的接下来一系列的错误。事务的出现是
    为了确保数据的完整性和一致性,在目前企业级应用开发中,事务管理是必不可少的

  2. 事务的属性:
    传播行为
    隔离级别
    只读提示
    事务超时间隔
    回滚原则
    事务的属性:是对事务策略如何应用到方法上的描述。

  3. 传播行为
    定义了事务应用到方法上的边界。也就是什么时候开始一个新的事务,或者什么时候事务被暂停,或者方法是
    否要在事务中运行。
    在这里插入图片描述

  4. 隔离级别
    用来指定一个事务受其他并发事务活动影响的程度。隔离性是数据的事务的4个特征之一,但是实际上来说,用
    户使用数据库产品是需要在效率和安全上找到平衡点的,所以需要设置事务的隔离级别;
    在这里插入图片描述

  5. 只读提示
    Read-only=true,必须配合传播行为来设置。一般建议设置在查询的方法中,

  6. 事务超时间隔
    可以让事务在特定的秒数后自动回滚,不必等到它自己结束。它也必须配合传播行为来设置。
    Timeout=5

  7. 回滚规则
    默认情况下在出现运行时异常RuntimeException才会回滚。检查时异常不回滚。当然也可以改变这种规则。

二、 声明式事务(常用)
声明式事务管理:它将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。事务管理作为一种横切关注点,可以通过AOP方法模块化。Spring通过Spring AOP框架支持声明式事务管理。
声明式事务管理有三种方法实现,分别是TransactionProxyFactoryBean的代理方式、基于AspectJ的xml配置方
式和基于注解的声明方式,后两种在开发应用中常常出现。
声明式事务管理是基于AOP思想完成的,类似与在给业务层加入切面,对事务操作前后进行一定的事务管理控
制。

**

说明:前面的写的知识只要看一遍有一个映像就行,没有必要过于纠结。实战才是最好的老师。

**
1.基于注解版–转账案例
修改核心配置文件

<!--开启 类的注解 切点的注解-->
  <context:component-scan base-package="com.kgc"></context:component-scan>
  <!--开启切点的注解-->
  <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  <!--实例化 jdbc模板对象 需要数据源 -->
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
  </bean>
  <!--创建一个自己的dataSource-->
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/k8514?
characterEncoding=utf-8"/>
    <property name="user" value="root"/>
     <property name="password" value="ROOT"/>
  </bean>
  <!--配置事务 管理 需要数据源 数据源有回滚 rollback(撤回)方法 -->
  <bean id="transactionManager1"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
  </bean>
  <!--开启 事务的注解 -->
  <tx:annotation-driven transaction-manager="transactionManager1"></tx:annotation-driven>

Dao实现类

@Repository
public class AccountDaoImpl  implements AccountDao{
 @Autowired
 private JdbcTemplate template;
  @Override
  public void outAccount(String outCard, double money) {
    String sql="update account set money=money-? where account=?";
    template.update(sql, money,outCard);
 }
  @Override
  public void inAccount(String inCard, double money) {
    String sql="update account set money=money+? where account=?";
    template.update(sql, money,inCard);
 }
}

Service实现类

@Transactional//事务的注解,表示当前类下的所有方法均加入事务
@Service
public class AccountServiceImpl implements AccountService{
 @Autowired
  private AccountDao dao;
  @Override
  public void transferAccounts(String inCard, String outCard, double money) {
    dao.outAccount(outCard,money);
    //int i=1/0;
    dao.inAccount(inCard,money);
 }
}

测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/spring/applicationContext.xml")
public class TestTx {
  @Autowired
  private AccountService service;
  @Test
  public void testTx1(){
    service.transferAccounts("曹操","刘备",50);
    System.out.println(1);
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值