简单单解决你的事务回滚问题

3 篇文章 0 订阅
/**
     * 用户登录接口
     * 
     * 
     * 1明确事务方法前的命名规则
     * 2保证事务方法执行的时间尽可能的短,不允许出现循环操作,不允许出现RPC等网络请求操作
     * 3不允许所有的方法都使用事务,节省服务器性能和缩短数据库连接时间
     * 4如果出现有多个地方需要事务回滚时,使用自定义或原有的异常进行抛出,异常必须继承RunTimeError,否则不会触发回滚操作
     * 5使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动回滚
     * 
     */
    @Transactional
    public UserModel login(UserModel user){
        
        UserModel userEntity = new UserModel();
        
        
        userEntity = userDao.login(user);
        if(userEntity == null)
        {
            return null;
        }
        
        userEntity = userDao.login(user);
        if(userEntity == null)
        {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return null;
        }
        else
        {
            return userEntity;
        }
    }




直接给出一个例子代码,上面只是记录一下,下面才是干货。

首先很多时候我们不会采用事务操作,但是当我们在一个服务层多次访问数据库特别是进行插入删除操作的时候,我们需要使用事务进行操作,也就是一个不成功,所有的操作全部回滚。

那么具体的事务特性我就不多说了,规范我也打在最上面的注释里面了。主要注意一下,

使用@Transactional 注解

如果第一次插入成功,第二次插入失败,执行TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 这条语句之后,第一次的插入动作就被回滚了,也就是并没有生效。

手动回滚看起来会比较实用一些。

然后对于抛出异常的那种自动回滚可以参考百度各种代码。比较麻烦一些,就不列举了。

 

补充一下:

使用Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();  设置回滚点,使用TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);回滚到savePoint。
 
 
后序补充详细属性配置(复杂)
在使用mybatis-plus进行事务回滚时,需要注意以下几点: 1. 确保你的mybatis-plus版本是高于2021年下半年的版本,因为在高版本中,mybatis-plus已经实现了多数据源事务的统一提交和回滚管理。 2. 在使用mybatis-plus时,部分配置项的名称可能与mybatis有所不同,需要注意调整配置项的名称。 3. 当需要实现多数据源的事务支持时,mybatis-plus已经将相关功能集成到spring框架中,因此简化了多数据源切换和事务的回滚提交操作。 4. 如果你使用的是旧版本的mybatis-plus,那么你需要自己实现多数据源切换和事务的回滚提交等操作,相对来说比较麻烦。 综上所述,使用mybatis-plus进行事务回滚相对简单,特别是在高版本中已经实现了多数据源事务的统一管理。具体的实现细节可以参考相关文档或官方指南。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [解决seata和mybatis-plus事物不回滚问题](https://blog.csdn.net/dxcll/article/details/124132317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [多数据源事务集成-mybatis-plus](https://blog.csdn.net/u013309797/article/details/121968596)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值