AOP事务处理(转账案例)

一、事务

1、什么是事务

将一系列操作当作一个完整工作单元,要么成功,要么失败,就是事务

2、事务的特性(ACID)

1)、原子性

不可分割的最小单位,是一个整体

2)、持久性

事务一创建对数据的改变是永久性的

3)、一致性

数据能够保持一致

4)、隔离性

一个事务与另一个事务并不能相互调用,互相干扰

(1)、没有隔离性的问题
1、读数据来说
1)、脏读:一个事务读取到另一个事务未提交的数据
2)、幻读/虚读:一个事务读取到另一个事务insert 的数据,导致事务多次读取的数据不一致
3)、不可重复读: -一个事务读取到另一个事务update的数据,导致事务多次读取的数据不一致
2、写数据来说

数据不能够正常更新

(2)、隔离级别
1、read uncommited读未提交,不能解决任何问题
2、Replatedread重复读, 解决了脏读的问题,但是幻读和不可重复读有可能发生
3、read commited 读已提交, 解决了不可重读的问题,但是脏读、幻读有可能发生
4、Serilizable序列化, 能够解决所有读的问题
(3)、spring事务传播行为

事务传播行为(点此跳转)

二、转账案例

1、dao层

public interface BankDao {

    //转出
    void out(String outname,int money);
    //转入
    void in(String inname,int money);

}

2、impl层

//转出
    public void out(String outname, int money) {
        String  sql = "update bank set money = money - ? where name = ?";
        Object[] obj = {money,outname};
        jdbcTemplate.update(sql,obj);
    }

    public void in(String inname, int money) {
        String  sql = "update bank set money = money + ? where name = ?";
        Object[] obj = {money,inname};
        jdbcTemplate.update(sql,obj);
    }

3、service层

//转账
    void Transfer(String outname,String inname,int money);

4、serviceImpl层

@Service("bankService")
@Transactional
public class BankServiceImpl implements BankService {

    @Resource(name = "bankDao")
    private BankDao bankDao;

    //
    public void Transfer(String outname, String inname, int money) {
        bankDao.out(outname,money);
        int i = 1/0;
        bankDao.in(inname,money);
    }
}

5.1、XML配置事务

<!--   配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
<!--    配置事务-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
<!--    aop配置-->
    <aop:config>
        <aop:pointcut id="pointcut1" expression="execution(* com.hp.service.impl.BankServiceImpl.* (..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"></aop:advisor>
    </aop:config>

5.2、事务注解开发

<!--   配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

<!--    注解开发事务-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值