天天看點

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實戰教程》之二十三

可以看到,沒有添加成功。

配套視訊