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();
}
}
1371

被折叠的 条评论
为什么被折叠?



