本文來自於千鋒教育在阿里雲開發者社區學習中心上線課程《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;
}
}
更換姓名:“王小貓”
執行結果:
可以看到,沒有添加成功。