本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程《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;
}
}
添加姓名更換“王歡”。
執行結果:

程式異常,但是資料庫中依然添加成功。
是以我們需要添加事務。
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void saveUser(User user) {
userDao.addUser(user);
int i = 6/0;
}
}
添加姓名更換“王樂”。
此時可以發現資料庫表中更新之後并沒有增添。
接着,我們再以之前的整合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;
}
}
添加姓名更換“王小狗”。
添加成功。
在程式中添加事務來運作:
@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;
}
}
更換姓名:“王小貓”
可以看到,沒有添加成功。