美文网首页
springboot事务注解

springboot事务注解

作者: 陆阳226 | 来源:发表于2020-03-02 22:02 被阅读0次

    springboot之事务注解

    数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

    开启事务

    springboot中只需要在方法上加上@Transactional注解,该方法即可成为一个事务

    简单示例

    准备数据

    创建数据表

    CREATE TABLE account
    (
    id int AUTO_INCREMENT
    PRIMARY KEY,
    name varchar(15) NOT NULL,
    balance decimal(10, 2) NOT NULL
    );

    插入数据

    批注 2020-03-02 194857.png

    实体、mybatis代码

    实体

    @Data
    public class Account implements Serializable {
        private Integer id;
    
        private String name;
    
        private BigDecimal balance;
    }
    

    dao、service

    @Repository
    public interface AccountDao {
        int updateAccount(Integer id, double money);
    }
    
    public interface TransferService {
        void transfer(Integer out, Integer in, double money);
    }
    
    @Service
    public class TransferServiceImpl implements TransferService {
    
        private final AccountDao accountDao;
    
        public TransferServiceImpl(AccountDao accountDao) {
            this.accountDao = accountDao;
        }
    
        @Override
        // @Transactional
        public void transfer(Integer out, Integer in, double money) {
            accountDao.updateAccount(out, money*(-1));
            // int i = 1 / 0;
            accountDao.updateAccount(in, money);
        }
    }
    

    测试

    测试从id 1的账号转账 100 到 id 2 的账户

    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    class TransferServiceImplTest {
    
        @Autowired
        private TransferService transferService;
    
        @Test
        void transfer() {
            transferService.transfer(1, 2, 100);
        }
    }
    
    

    测试情况

    • 屏蔽注解和有异常的代码,此时正常转账成功


      批注 2020-03-02 215827.png
    • 屏蔽注解,开启有异常的代码,在id 1 转出后发生异常, id 2 的转入操作代码没有得到执行
      此时的结果是id 1 少了100 而id 2 却没有增加100

      批注 2020-03-02 215843.png
    • 开启事务注解,代码发生异常后,事务会回退操作,id 1 2的账号都保持事务执行前的状态


      批注 2020-03-02 215905.png

    相关文章

      网友评论

          本文标题:springboot事务注解

          本文链接:https://www.haomeiwen.com/subject/uvzikhtx.html