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、結果

  • 無異常插入成功
    在這裏插入圖片描述
    表中數據已插入
    在這裏插入圖片描述

  • 有異常回滾
    在這裏插入圖片描述
    數據未插入成功,已回滾
    在這裏插入圖片描述

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