Spring - 事务 - 声明使用
1. pom.xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.1.11</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.0.0</version>
</dependency>
</dependencies>
2. application.properties
# 数据源配置
# 指定数据库连接的URL,这里连接的是MySQL数据库
spring.datasource.url=jdbc:mysql://10.10.0.5:3306/spring
# 数据库连接的用户名
spring.datasource.username=root
# 数据库连接的密码
spring.datasource.password=Password
# 指定数据库驱动类名,这里是MySQL的驱动类
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3. SpringConfig.java
@Configuration
@ComponentScan("com.springwork")
@Import(DataSourceConfig.class)
@PropertySource("classpath:application.properties")
public class SpringConfig {
}
4. DataSourceConfig.java
@EnableTransactionManagement
启用事务管理
@EnableTransactionManagement
public class DataSourceConfig {
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean
JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean
public TransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
5. UserEntity.java
@Component
public class UserEntity {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "UserEntity{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
6. UserDao.java
@Repository
public class UserDao {
@Autowired
JdbcTemplate jdbcTemplate;
public void addUser() {
String sql = "INSERT INTO user (id, name) VALUES (?, ?)";
jdbcTemplate.update(sql, 1, "test");
System.out.println("Added user");
}
public void deleteUser() {
String sql = "DELETE FROM user WHERE id = ?";
jdbcTemplate.update(sql, 1);
System.out.println("Deleted user");
}
public void getUser() {
String sql = "SELECT * FROM user";
jdbcTemplate.queryForList(sql);
System.out.println("Got user");
}
public void updateUser() {
String sql = "UPDATE user SET name = ? WHERE id = ?";
jdbcTemplate.update(sql, "test2", 1);
System.out.println("Updated user");
}
}
7. UserService.java
@Transactional
标记为事务,可作用在类,方法上,建议作用在业务类方法上。
@Service
public class UserService {
@Autowired
UserDao userDao;
@Transactional
public void addUser() {
userDao.addUser();
int i = 1 / 0;
System.out.println("addUser");
}
public void deleteUser() {
userDao.deleteUser();
System.out.println("deleteUser");
}
public void getUser() {
userDao.getUser();
System.out.println("getUser");
}
public void updateUser() {
userDao.updateUser();
System.out.println("updateUser");
}
}
8. Main.java
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = context.getBean(UserService.class);
userService.addUser();
}
}