Spring注解驱动开发—声明式事务
六、声明式事务
环境搭建:
1、导入相关依赖
数据源、数据库驱动、Spring-jdbc模块
2、配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)操作数据
3、给方法上标注@Transactional 表示当前方法是一个事务方法;
4、@EnableTransactionManagement 开启基于注解的事务管理功能;
@EnableXXX
5、配置事务管理器来控制事务
@Bean
public PlatformTransactionManager platformTransactionManager()
第一步、添加jdbc依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
第二步、创建配置类
@EnableTransactionManagement //开启基于注解的事务管理功能
@ComponentScan("com.xjz.tx") //扫描ioc容器
@Configuration
public class TxConfig {
//数据源
@Bean
public DataSource dataSource() throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setUser("root");
dataSource.setPassword("123456");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate() throws Exception {
//Spring对@Configuration类会特殊处理,给容器中加组件的方法,多次调用都只是从容器中找组件
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource());
return jdbcTemplate;
}
//注册事务管理器在容器中
@Bean
public PlatformTransactionManager platformTransactionManager() throws Exception {
return new DataSourceTransactionManager(dataSource());
}
}
第三步、创建UserDao层
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void insert(){
String sql = "INSERT INTO 'tbl_user'(username,age) VALUES('admin',20)";
String username = UUID.randomUUID().toString();
jdbcTemplate.update(sql,username,21);
}
}
第四步、创建UserService层
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional//开启事务
public void insertUser(){
userDao.insert();
System.out.println("插入完成...");
}
}
第五步、创建测试类
public class IOCTest_Tx {
@Test
public void test01(){
AnnotationConfigApplicationContext applicationContext
= new AnnotationConfigApplicationContext(TxConfig.class);
UserService userService = applicationContext.getBean(UserService.class);
userService.insertUser();
applicationContext.close();
}
}
第六步,运行结果
注意: 开启事务需要三步
1. 在Service层的方法上添加注解 @Transactional//开启事务
2. 在配置类上添加注解 @EnableTransactionManagement //开启基于注解的事务管理功能
3. 在配置类中注册事务管理器在容器中
//注册事务管理器在容器中
@Bean
public PlatformTransactionManager platformTransactionManager() throws Exception {
return new DataSourceTransactionManager(dataSource());
}
事务:开启事务后,代码中有异常的话,不能修改数据库
不开启事务,代码中有无异常,都可以修改数据库