Spring事务简介及案例:模拟银行账号间转账业务

简介: Spring事务简介及案例:模拟银行账号间转账业务

一、Spring事务简介

事务作用:在数据层保障一系列的数据库操作同成功同失败


Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败

public interface PlatformTransactionManager{
    void commit(TransactionStatus status) throws TransactionException;
    void rollback(TransactionStatus status) throws TransactionException;
}
public class DataSourceTransactionManager{
    ......
}

二、案例:模拟银行账号间转账业务

需求:实现任意两个账户间转账操作

需求微缩:A账户减钱,B账户加钱

分析:

1、数据层提供基础操作,指定账户减钱(outMoney),指定账户加钱(inMoney)

2、业务层提供转账操作(transfer),调用减钱与加钱的操作

3、提供2个账户和操作金额执行转账操作

4、基于Spring整合MyBatis环境搭建上述操作

1、在业务层接口上添加Spring事务管理

public interface AccountService{
    //配置当前接口方法具有事务
    @Transactional
    public void transfer(String out,String in ,Double money);
}

注意事项:


Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合


注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务

2、设置事务管理器

    //配置事务管理器,mybatis使用的是jdbc事务
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }

注意事项:


事务管理器要根据实现技术进行选择


MyBatis框架使用的是JDBC事务

3、开启注解式事务驱动

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
//开启注解式事务驱动
@EnableTransactionManagement
public class SpringConfig {
}

数据层提供基础操作,指定账户减钱(outMoney),指定账户加钱(inMoney)

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
public interface AccountDao {
    @Update("update tbl_account set money = money + #{money} where name = #{name}")
    void inMoney(@Param("name") String name, @Param("money") Double money);
    @Update("update tbl_account set money = money - #{money} where name = #{name}")
    void outMoney(@Param("name") String name, @Param("money") Double money);
}

业务层提供转账操作(transfer),调用减钱与加钱的操作

import com.itheima.dao.AccountDao;
import com.itheima.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class AccountServiceImpl implements AccountService {
    @Autowired
    private AccountDao accountDao;
    public void transfer(String out,String in ,Double money) {
        accountDao.outMoney(out,money);
        accountDao.inMoney(in,money);
    }
}

提供2个账户和操作金额执行转账操作

ca2d1fdb28734b8db9d90fa618e8a7fa.png

事务角色


事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法


事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法

目录
相关文章
|
4天前
|
Java 关系型数据库 MySQL
【JavaEE】Spring事务-@Transactional参数介绍-事务的隔离级别以及传播机制
【JavaEE】Spring事务-@Transactional参数介绍-事务的隔离级别以及传播机制
9 0
|
4天前
|
消息中间件 Java 关系型数据库
【JavaEE】Spring事务-事务的基本介绍-事务的实现-@Transactional基本介绍和使用
【JavaEE】Spring事务-事务的基本介绍-事务的实现-@Transactional基本介绍和使用
9 0
|
4天前
|
SQL Java 关系型数据库
Spring 事务
Spring 事务
12 1
|
4天前
|
数据采集 Web App开发 Java
Python 爬虫:Spring Boot 反爬虫的成功案例
Python 爬虫:Spring Boot 反爬虫的成功案例
|
4天前
|
Java 数据库连接 数据库
Spring事务简介,事务角色,事务属性
Spring事务简介,事务角色,事务属性
18 2
|
4天前
|
Java 数据库连接 数据库
16:事务-Java Spring
16:事务-Java Spring
29 5
|
7月前
|
Java Spring
【Spring事务的实现原理】
【Spring事务的实现原理】
|
4天前
|
Java 关系型数据库 数据库连接
Spring源码解析--深入Spring事务原理
本文将带领大家领略Spring事务的风采,Spring事务是我们在日常开发中经常会遇到的,也是各种大小面试中的高频题,希望通过本文,能让大家对Spring事务有个深入的了解,无论开发还是面试,都不会让Spring事务成为拦路虎。
41 1
|
4天前
|
Java 关系型数据库 MySQL
深入分析Spring事务和底层原理
深入分析Spring事务和底层原理
42 1
|
8月前
|
Java Spring
Spring Boot 中的事务传播行为是什么,原理,如何使用
Spring Boot 中的事务传播行为是什么,原理,如何使用