上一篇:如何区分多数据源? | 带你读《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;
}
}
添加姓名更换“王欢”。
执行结果:
程序异常,但是数据库中依然添加成功。
所以我们需要添加事务。
@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;
}
}
更换姓名:“王小猫”
执行结果:
可以看到,没有添加成功。