Java MyBatis Plus手动事务提交方法

注意:TransactionCallbackWithoutResult是TransactionCallback的一个子类,用于没有返回值的情况。如果你需要返回值,可以使用TransactionCallback<T>。

方式二:使用DataSourceTransactionManager

这种方式更底层一些,直接使用事务管理器来获取事务状态,然后手动提交或回滚。

步骤:
a. 注入DataSourceTransactionManager
b. 使用TransactionDefinition定义事务属性(如隔离级别、传播行为等)
c. 获取事务状态(TransactionStatus)
d. 在try-catch块中执行操作,根据情况提交或回滚

示例代码:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

@Service
public class YourService {

    @Autowired
    private PlatformTransactionManager transactionManager;

    public void manualTransactionWithManager() {
        // 定义事务属性
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

        // 开启事务
        TransactionStatus status = transactionManager.getTransaction(def);

        try {
            // 这里执行你的数据库操作
            // yourMapper.insert(entity1);
            // yourMapper.update(entity2);

            // 操作成功,提交事务
            transactionManager.commit(status);
        } catch (Exception e) {
            // 发生异常,回滚事务
            transactionManager.rollback(status);
            throw e; // 可以选择抛出异常
        }
    }
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

@Service
public class UserService {
    
    @Autowired
    private PlatformTransactionManager transactionManager;
    
    @Autowired
    private UserMapper userMapper;
    
    public void platformTransactionDemo() {
        // 定义事务属性
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        
        // 开启事务
        TransactionStatus status = transactionManager.getTransaction(def);
        
        try {
            // 执行数据库操作
            User user = new User();
            user.setName("王五");
            userMapper.insert(user);
            
            // 业务逻辑...
            userMapper.updateById(user);
            
            // 手动提交事务
            transactionManager.commit(status);
            
        } catch (Exception e) {
            // 回滚事务
            transactionManager.rollback(status);
            throw e;
        }
    }
}

 

posted @ 2025-12-25 18:33  红尘沙漏  阅读(2)  评论(0)    收藏  举报