Spring AOP:声明式事务@Transactional在AOP中的实现

声明式事务使用

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值