@Transactional 的用法
时间: 2023-07-08 15:52:56 浏览: 86
spring的@Transactional注解用法解读
@Transactional是Spring框架中用来开启事务的注解,它可以标注在类或方法上,用于控制事务的开启、提交或回滚。具体用法如下:
1. 在方法上使用@Transactional注解
在需要使用事务的方法上添加@Transactional注解,表示该方法需要开启事务。示例代码如下:
```java
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void addUser(User user) {
userDao.addUser(user);
}
}
```
2. 在类上使用@Transactional注解
在需要将整个类中的方法都纳入事务管理的情况下,可以在类上添加@Transactional注解。示例代码如下:
```java
@Service
@Transactional
public class UserService {
@Autowired
private UserDao userDao;
public void addUser(User user) {
userDao.addUser(user);
}
public void updateUser(User user) {
userDao.updateUser(user);
}
public User getUserById(int id) {
return userDao.getUserById(id);
}
}
```
需要注意的是,当在类上使用@Transactional注解时,该类中所有的public方法都会被纳入事务管理。
3. 配置@Transactional注解的属性
@Transactional注解还提供了一些可配置的属性,用于控制事务的隔离级别、传播行为、超时时间、只读属性等。示例代码如下:
```java
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, readOnly = false, timeout = 10)
public void addUser(User user) {
userDao.addUser(user);
}
```
以上代码中,@Transactional注解的属性含义如下:
- propagation:设置事务的传播行为,可选值有REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED,默认值为REQUIRED。
- isolation:设置事务的隔离级别,可选值有DEFAULT、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE,默认值为DEFAULT。
- readOnly:设置事务是否为只读事务,默认为false。
- timeout:设置事务的超时时间,单位为秒,默认值为-1,表示不设超时时间。
需要注意的是,这些属性的配置可以针对每个方法单独配置,也可以在类上统一配置。如果在方法上配置了这些属性,会覆盖在类上的配置。
阅读全文