SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三-阿里云开发者社区

开发者社区> 开发者学习资源库> 正文

SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三

简介: 本节介绍了SpringBoot的事务管理,使用@Transactional注解在需要的方法上进行添加,就可以来声明事务了。

上一篇:如何区分多数据源? | 带你读《SpringBoot实战教程》之二十二
下一篇:SpringBoot如何整合JPA-Hibernate? | 带你读《SpringBoot实战教程》之二十四

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《SpringBoot实战教程》,主讲人杨红艳,点击查看视频内容

SpringBoot的事务管理

在SpringBoot中可以使用xml配置文件的方式或者注解的方式来声明事务。

在Spring Boot中推荐使用@Transactional注解来声明事务。

当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,SpringBoot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。

我们以之前整合JdbcTemplate的案例来进行说明:
如果不进行事务管理,将会发生什么呢?
修改service层代码:

@Service
public class UserService {
        
        @Autowired
        private UserDao userDao;

         public void saveUser(User user) {
    userDao.addUser(user);
                int i = 6/0;
         }
}

添加姓名更换“王欢”。
执行结果:
image.png
image.png

程序异常,但是数据库中依然添加成功。
所以我们需要添加事务。

@Service
public class UserService {
        
        @Autowired
        private UserDao userDao;

         @Transactional
         public void saveUser(User user) {
    userDao.addUser(user);
                int i = 6/0;
         }
}

添加姓名更换“王乐”。
执行结果:
image.png
image.png

此时可以发现数据库表中更新之后并没有增添。

接着,我们再以之前的整合mybatis的案例来实现一下:
修改UsersServiceImpl:

@Service
public class UsersServiceImpl implements UsersService {

    @Autowired
    private UserMapper usersMapper;

    @Override
    public Users findUser(String name) {
        return usersMapper.findUserByName(name);
    }

    @Override
    public void saveUser(Users user) {
        usersMapper.addUser(user.getName(), user.getPassword());
        int a = 6/0;
    }

}

添加姓名更换“王小狗”。
执行结果:
image.png
image.png
添加成功。
在程序中添加事务来运行:

@Service
public class UsersServiceImpl implements UsersService {

    @Autowired
    private UserMapper usersMapper;

    @Transactional
    @Override
    public Users findUser(String name) {
        return usersMapper.findUserByName(name);
    }

    @Override
    public void saveUser(Users user) {
        usersMapper.addUser(user.getName(), user.getPassword());
        int a = 6/0;
    }

}

更换姓名:“王小猫”
执行结果:
image.png
image.png
可以看到,没有添加成功。

配套视频

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

开发者免费资源中心,技术电子书、会议PPT、论文资料持续供应中

官方博客
官网链接