大數據

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
可以看到,沒有添加成功。

配套視頻

Leave a Reply

Your email address will not be published. Required fields are marked *