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中通常指代数据层方法,也可以是业务层方法

目录
相关文章
|
15天前
|
Java 数据库连接 API
Spring事务管理嵌套事务详解 : 同一个类中,一个方法调用另外一个有事务的方法
Spring事务管理嵌套事务详解 : 同一个类中,一个方法调用另外一个有事务的方法
|
15天前
|
Java Spring
spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
15天前
|
XML Java 关系型数据库
面试一口气说出Spring的声明式事务@Transactional注解的6种失效场景
面试一口气说出Spring的声明式事务@Transactional注解的6种失效场景
|
20天前
|
Java Spring
解析Spring Boot中的事务管理机制
解析Spring Boot中的事务管理机制
|
25天前
|
XML Java 关系型数据库
Spring6(四):JUnit、事务(2)
Spring6(四):JUnit、事务(2)
21 0
|
17天前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
55 0
|
25天前
|
Java 开发者 Spring
深入理解Spring Boot中的自动配置原理
深入理解Spring Boot中的自动配置原理
|
27天前
|
前端开发 Java 微服务
Spring Boot与微前端架构的集成开发
Spring Boot与微前端架构的集成开发
|
1月前
|
Java
springboot自定义拦截器,校验token
springboot自定义拦截器,校验token
45 6