正确使用 @Transactional 注解 代码示例
时间: 2023-07-03 07:04:18 浏览: 119
transformation、action算子代码示例
在 Spring Framework 中,@Transactional 注解可以用来标记一个方法,使其在执行期间具有事务性,以保证数据的一致性和完整性。下面是一些使用 @Transactional 注解的示例代码:
1. 在方法上添加注解,使用默认事务管理器:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Transactional
public void saveUser(User user) {
userDao.save(user);
}
}
```
2. 在方法上添加注解,指定事务管理器:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private PlatformTransactionManager transactionManager;
@Override
@Transactional(value = "transactionManager")
public void saveUser(User user) {
userDao.save(user);
}
}
```
3. 在类级别添加注解,将所有方法都纳入事务管理:
```java
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void saveUser(User user) {
userDao.save(user);
}
@Override
public void updateUser(User user) {
userDao.update(user);
}
@Override
public void deleteUser(int id) {
userDao.delete(id);
}
}
```
在使用 @Transactional 注解时,还应该注意以下几点:
- @Transactional 注解只对 public 方法有效。
- 默认情况下,Spring 只会对抛出 RuntimeException 或其子类的异常进行回滚,如果需要对其他异常进行回滚,可以通过设置 rollbackFor 属性来实现。
- 如果在同一个事务中调用了被 @Transactional 注解的方法,那么事务仅会在最外层方法结束时提交,而不是在每个方法结束时提交。
阅读全文