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

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

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

相关内容

热门资讯

星源材质向香港联交所递交H股发... 星源材质(300568)发布公告,公司已于2025年7月7日向香港联合交易所递交了公开发行境外上市外...
鉴罪者第几章有车 鉴罪者第几章有车第260章。这个时间,若是在闹市区里,恐怕无数夜猫子的夜生活才刚刚开始,但在郊区里,...
国足又被韩国队进球了!0:3 北京时间7月7日晚,国足迎来东亚杯首场比赛,对阵东道主韩国队。比赛第7分钟,韩国队10号球员李东炅率...
国力股份:上半年净利同比预增1... 上证报中国证券网讯(记者黄璐婧)国力股份披露业绩预告,预计公司2025年上半年实现营业收入5.4亿元...
记者手记丨美国关税政策使加拿大...   新华社渥太华7月7日电 记者手记|美国关税政策使加拿大“汽车城”遭受前所未有冲击  新华社记者林...
新希望(000876.SZ):... 格隆汇7月7日丨新希望(000876.SZ)公布,公司2025年6月销售生猪133.00万头,环比变...
美团回应:下单量突破历史峰值导... 刚刚,美团外卖在其官方微博发文回应称:7月5日下午6点前后,因用户下单量突破历史峰值,触发了服务器限...
零的突破这个故事讲的是―在射击... 零的突破这个故事讲的是―在射击塞中沉着冷静,勇夺奥运金牌的事。答案零的突破这个故事讲的是―在射击塞中...
西山科技:控股股东拟增持500... 西山科技7月7日晚间公告,公司控股股东重庆西山投资有限公司拟使用其自有资金或自筹资金,自公告披露之日...
君乐宝台前赔偿,幕后举报删帖泼... 文/综业网近日,综业网收到了一条来自君乐宝方面的举报,举报内容一上来就给包括综业网在内的相关平台扣上...