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

浙公网安备 33010602011771号