Springboot事务的使用

13 篇文章 1 订阅
7 篇文章 0 订阅

Springboot事务的使用

Springboot事务介绍

​ Springboot开启事务很简单, 只需要一个注解 @Transactional 就可以了, 因为在 Springboot 中已经默认对JPA, JDBC, Mybatis开启了事务, 引入它们依赖的时候, 事务就默认开启. 当然, 如果你需要用其他的ORM框架, 比如 Beat1SQL, 就需要自己配置相关的事务管理器.

​ Springboot用于配置事务的类为 TransactionAutoConfiguration , 在 Springboot中, 无须显示开启使用@EnableTransactionManagement .

类级别事务

@Transactional
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;

    @Override
    public User findByPK(String id) {
        return userMapper.selectByPrimaryKey(id);
    }
}

上述代码在 UserServiceImpl 中开启事务, 在 类级别 上使用注释开启, 一般事务都是 加在服务层 , @Transactional注解在类上, 意味着此类的所有 public 方法都是开启事务的.

方法级别事务

@Transactional 除了可以注解在类上, 还可以注解到**方法**上面. 当注解在类上时, 意味着此类中所有的public方法都是开启事务的. 如果 类级别 和 方法级别 同时使用了 @Transactional 注解, 那么方法级别注解就会 覆盖 类级别注解.

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;

    @Transactional
    @Override
    public int save(User user) {
        int count =  userMapper.insert(user);
        String error = null;
        error.split("/");
        return count;
    }
}

我在 save()方法添加事务, 同时在save完成之后抛出NullPointException异常, 查看数据是否可以回转.

@SpringBootTest
@RunWith(SpringRunner.class)
class MybatisplusApplicationTests {
    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        User user = new User();
        user.setDeletetag(false);
        user.setName("uwei");
        user.setId("217");
        user.setAge(20);
        user.setEmail("777@qq.com");
        userService.save(user);

    }
}

​ 运行后,由于save 是开启事务进行保存数据, 当执行insert后, 如果方法正常执行结束就会提交 事务, 然后数据就会更新到数据库, 但是上面再执行insert后, 抛出了一个 异常, 导致方法没有正常结束, 所以 数据会回滚, 检查下数据库, 数据库并没有新增这条user记录.

​ 然后我取消在UserserviceImplsave()方法上的@Transactional注解, 再执行一次, 可以发现即使insert后面抛出了异常, 数据还是会持久化到数据库.

Over

如果觉得需要更多技术干货, 来我的CSDN 和 GitHub哦

CSDN: https://blog.csdn.net/dummyo

Github: https://github.com/uweii

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值