//配置类
@ComponentScan("com.itheima")
@EnableTransactionManagement //开启事务管理
public class SpringConfig {
//配置mapper位置
@Bean
public MapperScannerConfigurer scannerConfigurer(){
MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
scannerConfigurer.setBasePackage("com.itheima.mapper");//设置接口包位置
return scannerConfigurer;
}
//配置数据源
@Bean
public DruidDataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring");
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
}
//配置SqlSessionFactory
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DruidDataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);//设置数据源
return sqlSessionFactoryBean;
}
//创建一个事务对象放进ioc容器中
@Bean
public DataSourceTransactionManager transactionManager(DruidDataSource dataSource){
DataSourceTransactionManager manager = new DataSourceTransactionManager();
manager.setDataSource(dataSource);
return manager;
}
}
@Service
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountMapper accountMapper;
@Transactional(rollbackFor = Exception.class) //开启该方法事务,带参则编译期异常会回滚
@Override
public void transfer(String out, String in, Float money) throws Exception {
//1. out减钱
accountMapper.diff(out, money);
//2. 模拟异常
// int i = 1 / 0;
if (true){
throw new Exception();
}
//3. in加钱
accountMapper.add(in, money);
}
}
1. @EnableTransactionManagement //类上开启事务管理
2. @Transactional(rollbackFor = Exception.class) //开启该方法事务,带参则编译期异常会回滚,不带参只回滚运行时异常
3. 创建DataSourceTransactionManager bean交给ioc管理