声明式事务使用
1.在pom.xml中引入依赖
这里使用了spring-jdbc,c3p0连接池,mysql驱动
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
</dependencies>
2.新建config类开启事务,注解扫描,配置数据库连接池连接信息
@Configuration
//写入对应的包路径 如com.****.****
@ComponentScan("......")
@EnableTransactionManagement
public class Cap11MainConfig {
@Bean
public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//数据库用户
dataSource.setUser("root");
//密码
dataSource.setPassword("root");
//mysql驱动
dataSource.setDriverClass("com.mysql.jdbc.Driver");
//mysql的tns连接
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate() throws PropertyVetoException {
return new JdbcTemplate(dataSource());
}
@Bean
public PlatformTransactionManager transactionManager() throws PropertyVetoException {
return new DataSourceTransactionManager(dataSource());
}
}
3.新建表,各字段定义如下
4.新建dao,service层
@Repository
public class OrderDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void insert(){
String sql = "insert into `order` (ordertime, ordermoney, orderstatus) values(?,?,?)";
jdbcTemplate.update(sql,new Date(),20,0);
}
}
@Service
public class OrderService {
@Autowired
private OrderDao orderDao;
@Transactional
public void testService() {
orderDao.insert();
System.out.println("操作完成");
//此处会抛出异常
int a = 1/0;
}
}
5.编写测试类
public class Cap11Test {
@Test
public void test01(){
AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(Cap11MainConfig.class);
OrderService service = app.getBean(OrderService.class);
service