本文主要是介绍Spring事务简介及案例:模拟银行账号间转账业务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、Spring事务简介
二、案例:模拟银行账号间转账业务
1、在业务层接口上添加Spring事务管理
2、设置事务管理器
3、开启注解式事务驱动
一、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{//配置当前接口方法具有事务@Transactionalpublic void transfer(String out,String in ,Double money);
}
注意事项:
Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合
注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务
2、设置事务管理器
//配置事务管理器,mybatis使用的是jdbc事务@Beanpublic 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 {@Autowiredprivate AccountDao accountDao;public void transfer(String out,String in ,Double money) {accountDao.outMoney(out,money);accountDao.inMoney(in,money);}}
提供2个账户和操作金额执行转账操作
事务角色
事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法
事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法
这篇关于Spring事务简介及案例:模拟银行账号间转账业务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!