Spring——Spring事务+案例分析
创始人
2024-06-02 05:56:22

Spring事务简介:

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

业务层实际上是组合了若干数据层的功能,在业务层开事务可以保障调用的多个数据层操作处于同一个事务,同成功,同失败。

通过下面的接口实现(平台事务管理器) 

里面实现了提交时共同提交,回滚时都会回滚。

Spring提供的最基本事务管理器实现类

可以在业务层开事务,内部使用jdbc的事务,适用于Spring整合mybatis时的事务管理

 案例分析

 环境准备:

数据库表格:

 项目结构

业务层接口以及实现类

调用数据层的两个方法实现转账操作 

数据层接口 

提供一个给指定账户加钱的方法,一个给指定账户减钱的方法

domain层

配置数据库中的属性的setter和getter方法以及一个toString方法

配置类当中

mybatis的配置类

public class MybatisConfig {@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();ssfb.setTypeAliasesPackage("org.example.domain");ssfb.setDataSource(dataSource);return ssfb;}@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("org.example.dao");return msc;}
}

jdbc的配置类

public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String userName;@Value("${jdbc.password}")private String password;@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}//配置事务管理器,mybatis使用的是jdbc事务// @Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource){DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();transactionManager.setDataSource(dataSource);return transactionManager;}
}

 spring的配置类

@Configuration
@ComponentScan("org.example")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
public class SpringConfig {}

jdbc.properties文件

测试类当中

测试结果如下

数据发生变化 

假如在业务层操作时出现问题,如下会抛出一个异常 

但是数据库里面的数据却有一个人的钱少了,这种情况是不允许的

 

使用Spring的事务

Spring提供的事务就是用来做这种需要保证同成功同失败的操作的 

第一步 :在需要加事务的方法的原始接口方法上打一个注解

@Transactional   表示开启事务

 也可以写在类或者接口上表示该类或者改接口下的所有方法都开启事务

 第二步:配置事务管理器

在jdbc.config中定义一个事务管理器的bean,这里需要提供对应的数据源,一个bean需要外部资源通过参数注入的方式

第三步:到spring配置类中注册使用注解式事务驱动

@Configuration
@ComponentScan("org.example")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
@EnableTransactionManagement  //新的注解
public class SpringConfig {}

现在就可以在出现异常时保证童成功同失败了

相关内容

热门资讯

今年我省粮食产量达515.56... (来源:辽宁日报)转自:辽宁日报 图为在中储粮(盘锦)储运有限公司,装运粮食的重型卡车排起长队...
国家发展改革委部署促进投资止跌... (来源:辽宁日报)转自:辽宁日报 新华社北京12月13日电 (记者魏玉坤) 记者13日从全国发展和改...
江苏省实施《中华人民共和国森林... (来源:新华日报) 目 录 第一章 总则 第二章 森林、林木和林地权属管理...
姜堰数字化产品讲“活”理论 (来源:新华日报) □ 本报记者 卢佳乐 通讯员 姜宣 “王教授,您约我‘喝茶论道’,...
联合国维和部队在苏丹遇袭 6人... 转自:财联社【联合国维和部队在苏丹遇袭 6人死亡】财联社12月14日电,当地时间13日,苏丹武装部队...