spring编程式事务入门案例

spring编程式事务入门案例

参考网址:

https://blog.csdn.net/kass114/article/details/120414702?ops_request_misc=&request_id=&biz_id=102&utm_term=spring%E7%BC%96%E7%A8%8B%E5%BC%8F%E4%BA%8B%E5%8A%A1&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-120414702.nonecase&spm=1018.2226.3001.4187

spring事务分类

spring事务分为 编程式事务声明式事务

  • 编程式事务
  • 声明式事务

一般我们使用声明式事务 , 通过 @Transational 注解 , spring 就可以帮我们控制事务简单方便

声明式事务大概原理

Spring 管理的 javabean 上标注 @Transational 注解 , 或者在类的对应方法上标注@Transational注解 ,

那么对应类或者对应方法就会被 sprin 事务管理 , 底层 spring 会将该类生成动态代理对象 , 没有出现异

常 , 自动提交 , 如果出现异常, 回滚操作 , 用户可以自定义哪些异常进行回滚

编程式事务demo

@Autowired
private PersonDao personDao;
/**
TransactionTemplate
简化编程事务界定和事务异常处理的模板类。
*/
@Autowired
private TransactionTemplate transactionTemplate;
//测试编程式事务
    @GetMapping("/transationByCode")
    public String transationByCode(){
        int i = transationByCodeMethod();
        return "影响的行数   "+ i;
    }

    private int transationByCodeMethod(){
        Integer execute = transactionTemplate.execute(transactionStatus -> {
            try {
                // ... 事务方法
                int row = personDao.insert();
//                int i = 1/0;  //模拟出现异常
                return row;
            } catch (Exception e) {
                e.printStackTrace();
                //回滚
                transactionStatus.setRollbackOnly();
                return 0;
            }
        });
        return execute;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架提供了两种事务管理方式:声明式事务程式事务程式事务是通过写代码来实现事务管理的方式。在Spring中,使用程式事务需要借助于事务管理器(TransactionManager)和程式事务模板(TransactionTemplate)来进行操作。 首先,你需要配置一个事务管理器,例如使用Spring提供的DataSourceTransactionManager来管理事务。然后,你可以在代码中使用TransactionTemplate来执行事务操作。 下面是一个简单的示例代码: ```java import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; public class TransactionalService { private TransactionTemplate transactionTemplate; public void setTransactionTemplate(TransactionTemplate transactionTemplate) { this.transactionTemplate = transactionTemplate; } public void performTransactionalOperation() { transactionTemplate.execute(new TransactionCallback<Void>() { public Void doInTransaction(TransactionStatus status) { try { // 执行数据库操作等业务逻辑 // 如果发生异常,可以通过调用 status.setRollbackOnly() 设置回滚 } catch (Exception e) { status.setRollbackOnly(); } return null; } }); } } ``` 在上面的示例中,通过调用transactionTemplate.execute方法来执行需要进行事务管理的业务逻辑。如果发生异常,通过调用status.setRollbackOnly()方法设置事务回滚。 程式事务相对于声明式事务更加灵活,可以根据业务需要精确控制事务的边界和行为。但是程式事务的代码相对较多,容易引入冗余代码,同时也影响代码的可读性和维护性。 因此,在实际开发中,一般推荐使用声明式事务来管理事务,而程式事务更适用于一些特殊情况下的事务管理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值