Spring之事务管理

1 什么是事务

事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败

2 Spring管理事务

1 Spring 事务管理操作

1 编程式事务管理

2 声明式事务管理

  • 基于注解方式
  • 基于xml配置方式

Spring进行声明式事务管理,底层原理是使用AOP, 而Spring中提供了一个接口, 事务管理器,该接口对于不同的框架提供了不同的实现类. DataSourceTransactionManager

3 注解声明式事务管理

1 在spring配置文件配置事务管理器

<!--创建事务管理器-->
<bean id="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <!--注入数据源-->
 <property name="dataSource" ref="dataSource"></property>
</bean>

2 在spring配置文件,开启事务注解

首先在spring配置文件中引入名称空间tx, 在开启事务注解.

<!--开启事务注解-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

3 在service类上面添加事务注解

@Service
@Transactional
public class UserService {
    // ...
}

4 xml声明式事务管理

1 在spring配置文件中进行配置

  • 首先配置事务管理器
  • 配置通知
  • 配置切入点和切面
<!--1 创建事务管理器-->
<bean id="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <!--注入数据源-->
 <property name="dataSource" ref="dataSource"></property>
</bean>
<!--2 配置通知-->
<tx:advice id="txadvice">
 <!--配置事务参数-->
 <tx:attributes>
 <!--指定哪种规则的方法上面添加事务-->
 <tx:method name="accountMoney" propagation="REQUIRED"/>
 <tx:method name="account*"/>
 </tx:attributes>
</tx:advice>
<!--3 配置切入点和切面-->
<aop:config>
 <!--配置切入点-->
 <aop:pointcut id="pt" expression="execution(* 
com.cf.spring5.service.UserService.*(..))"/>
 <!--配置切面-->
 <aop:advisor advice-ref="txadvice" pointcut-ref="pt"/>
</aop:config>

5 完全注解声明式事务管理

1 创建配置类, 使用配置类代替xml配置

@Configuration //配置类
@ComponentScan(basePackages = "cf") //组件扫描
@EnableTransactionManagement //开启事务
public class TxConfig {
    
     // 创建数据库连接池
     @Bean
     public DruidDataSource getDruidDataSource() {
         DruidDataSource dataSource = new DruidDataSource();
         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
         dataSource.setUrl("jdbc:mysql:///user_db");
         dataSource.setUsername("root");
         dataSource.setPassword("root");
         return dataSource;
     }
    
     // 创建 JdbcTemplate 对象
     @Bean
     public JdbcTemplate getJdbcTemplate(DataSource dataSource) {
         // 到 ioc 容器中根据类型找到 dataSource
         JdbcTemplate jdbcTemplate = new JdbcTemplate();
         // 注入 dataSource
         jdbcTemplate.setDataSource(dataSource);
         return jdbcTemplate;
     }
    
     // 创建事务管理器
     @Bean
     public DataSourceTransactionManager 
    getDataSourceTransactionManager(DataSource dataSource) {
         DataSourceTransactionManager transactionManager = new 
        DataSourceTransactionManager();
         transactionManager.setDataSource(dataSource);
         return transactionManager;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值