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

上一篇:如何区分多数据源? | 带你读《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;
         }
}

添加姓名更换“王欢”。
执行结果:
SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三
SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三

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

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

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

添加姓名更换“王乐”。
执行结果:
SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三
SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三

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

接着,我们再以之前的整合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;
    }

}

添加姓名更换“王小狗”。
执行结果:
SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三
SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三
添加成功。
在程序中添加事务来运行:

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

}

更换姓名:“王小猫”
执行结果:
SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三
SpringBoot的事务管理 | 带你读《SpringBoot实战教程》之二十三
可以看到,没有添加成功。

配套视频

上一篇:云原生转型:规模化演进与文化思考


下一篇:CefSharp For WPF自定义右键菜单栏