1、pom.xml
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.6.RELEASE</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</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> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.6.RELEASE</version> </dependency>
2、sql脚本
CREATE TABLE `order` (
`order_id` INT(11) NOT NULL AUTO_INCREMENT,
`order_time` DATETIME DEFAULT NULL,
`order_money` DECIMAL(20,0) DEFAULT NULL,
`order_status` CHAR(1) DEFAULT NULL,
PRIMARY KEY(order_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
3、配置类
package com.it.huaxin.transaction.config; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; import java.beans.PropertyVetoException; @Configuration @ComponentScan("com.it.huaxin.transaction") @EnableTransactionManagement public class TransactionConfig { @Bean public DataSource dataSource() throws PropertyVetoException { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setUser("root"); dataSource.setPassword("1234"); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test"); return dataSource; } @Bean public JdbcTemplate jdbcTemplate() throws PropertyVetoException { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource()); return jdbcTemplate; } /** * 注册事务管理器 * * @return * @throws PropertyVetoException */ @Bean public PlatformTransactionManager platformTransactionManager() throws PropertyVetoException { return new DataSourceTransactionManager(dataSource()); } }
4、业务类
package com.it.huaxin.transaction.dao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import java.util.Date; @Repository public class OrderDao { @Autowired private JdbcTemplate jdbcTemplate; public void insert () { String sql = "insert into `order`(order_time, order_money, order_status) values (?, ?, ?)"; jdbcTemplate.update(sql, new Date(), 20, 0); } }
package com.it.huaxin.transaction.service; import com.it.huaxin.transaction.dao.OrderDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class OrderService { @Autowired private OrderDao orderDao; @Transactional public void addOrder() { orderDao.insert(); System.out.println("操作完成"); int a = 1/0; } }
5、测试类
package com.it.huaxin.transaction; import com.it.huaxin.transaction.config.TransactionConfig; import com.it.huaxin.transaction.service.OrderService; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TransactionTest { public static void main(String [] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TransactionConfig.class); OrderService bean = context.getBean(OrderService.class); bean.addOrder(); context.close(); } }