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 {}

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

相关内容

热门资讯

美俄同意恢复高级别军事对话 本文转自【新华网】;新华社阿布扎比2月5日电(记者赵丹亮 夏晓)美军欧洲司令部5日发表声明说,美国与...
固德电材系统(苏州)股份有限公... 有效报价是指网下投资者的报价不低于发行人和主承销商确定的发行价格,且未作为最高报价部分被剔除,同时符...
北京首创生态环保集团股份有限公... 证券代码:600008 证券简称:首创环保 公告编号:2026-005北京首创生态环保集团股份有限...
安徽新力金融股份有限公司关于为... 证券代码:600318 证券简称:新力金融 公告编号:临2026-003安徽新力金融股份有限公司关...
乌国防部长说 乌境内俄方“星链... (来源:衢州日报)转自:衢州日报  新华社基辅2月5日电 (记者 李东旭) 乌克兰国防部长费奥多罗夫...