Spring纯注解实现声明式事务

实现Spring声明式事务步骤:

在这里插入图片描述
以下为具体代码实现:

1、代码结构
在这里插入图片描述
2、pom文件导入依赖jar包

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.1</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.30</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.8.RELEASE</version>
    </dependency>

3、创建业务逻辑代码

/**
 * Created by qing.zhao on 2020/3/18.
 * 业务层
 */
@Service
public class ProductServiceImpl {
    @Autowired
    private ProductDao productDao;
    public void insertProduct(Product product){
        productDao.insertProduct(product.getProductSkn(), product.getProductName());
        System.out.println("插入成功!");
    }
}
/**
 * Created by qing.zhao on 2020/3/18.
 * 创建并执行sql语句
 */
@Repository
public class ProductDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Transactional
    public void insertProduct(Integer skn, String name){
        String insertSql = "insert into product(productSkn,productName) values (?, ?)";
        //步骤1:插入商品数据
        jdbcTemplate.update(insertSql, skn, name);
        //模仿其他步骤出错场景
//        int i = 10/0;
    }

}
/**
 * Created by qing.zhao on 2020/3/18.
 * 商品属性
 */
public class Product {
    private Integer productSkn;
    private String productName;

    public Product() {
    }

    public Product(Integer productSkn, String productName) {
        this.productSkn = productSkn;
        this.productName = productName;
    }

    public Integer getProductSkn() {
        return productSkn;
    }

    public void setProductSkn(Integer productSkn) {
        this.productSkn = productSkn;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

}

4、配置类代码

/**
 * Created by qing.zhao on 2020/3/18.
 * 配置类相当于bean.xml
 */
@Configuration
@ComponentScan(value = "com.qing.zhao.*")
@Import({JdbcTemplateConfig.class, TransactionManager.class})
@EnableTransactionManagement
public class ProductConfigation {
}
/**
 * Created by qing.zhao on 2020/3/18.
 * 数据库相关配置
 */
public class JdbcTemplateConfig {

    @Bean
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
    @Bean
    public DataSource dataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("11111111");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        return dataSource;
    }
}
/**
 * Created by qing.zhao on 2020/3/18.
 * 事务管理器
 */
public class TransactionManager {
    @Bean
    public PlatformTransactionManager dtManager(DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }
}

5、测试类

/**
 * Hello world!
 * 测试类
 */
public class App 
{
    public static void main( String[] args ) throws Exception {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ProductConfigation.class);
        ProductServiceImpl productService = applicationContext.getBean(ProductServiceImpl.class);
        System.out.println( "Hello World!" );
        Product product = new Product();
        product.setProductName("qingQing1");
        product.setProductSkn(1234567);
        productService.insertProduct(product);

    }
}

6、结果

  • 无异常插入成功
    在这里插入图片描述
    表中数据已插入
    在这里插入图片描述

  • 有异常回滚
    在这里插入图片描述
    数据未插入成功,已回滚
    在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章