Spring声明式事务管理

本文详细介绍了Spring的声明式事务管理,包括事务的四大特性、编程式事务管理的不足以及声明式事务管理的优势。此外,还提到了事务传播行为、隔离级别等重要概念。同时,文章还探讨了Spring中的JdbcTemplate框架,包括其用途、搭建步骤和常用API。最后,简述了Spring5的新特性,如Log4j2的整合和JUnit5的支持。
摘要由CSDN通过智能技术生成

一、事务:

       1、 四大特性:【ACID】

                ① 原子性(atomicity):不可分割,表现为一个事务中涉及到的多个操作在逻辑上缺一不可,要求事务中的所有操作要么都执行,要么都不执行

               ②  一致性(consistency):数据一致,所有数据都处于满足业务规则的一致性状态。一个事务不管涉及到多少个操作,都必须保证事务执行前后数据都是正确的;如果有一个或某几个操作失败了,则必须将其他所有的操作撤销,将数据恢复到事务执行前的状态,也就是说回滚

                ③ 隔离性(isolation):要求多个事务在并发执行过程中不会相互干扰

                ④ 持久性(durability):事务执行完成后,对数据的修改永久的保存下来,被写入到持久化存储器中不会因各种系统错误或其他意外情况而受到影响

        2、三种行为:

                ① 开启事务:connection.setAutoCommit(flase)

                ② 提交事务:connection.commit()

                ③ 回滚事务:connection.rollback()

       3、 编程式事务管理:   

                1) 获取数据库连接Connection对象

                2) 取消事务的自动提交

                3) 执行操作

                4) 正常完成操作时手动提交事务

                5) 执行失败时回滚事务

                6) 关闭相关资源

     总结:编程式事务管理不足,将事务管理代码【非业务代码】与业务代码书写一处,导致代码混乱和代码分散问题。

     此时:需要使用AOP思想【先横向提取,再动态织入】,管理事务:声明式事务管理

        4、声明式事务管理:

                1)导入相关jar包

                        spring-aspects-5.3.1.jar

                        com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar  <依赖上jar包>

                2)开启声明式事务管理支持

               3)在需要事务管理的方法或类上,添加@Transactional

        5、不使用事务管理问题

            案例:以买书为例

 /**
     * 买书->查询book价格->修改库存->修改余额
     * @param userId
     * @param isbn
     */
    public void purchase(String userId, String isbn) {
        //1.查询book价格
        Integer price = bookShopDao.getBookPriceByIsbn(isbn);
        //2.修改库存
        bookShopDao.updateBookStock(isbn);
        //3.修改余额
        bookShopDao.updateUserBalance(userId,price);
    }
@Test
    public void testBookShopService(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("applicationContext_transaction.xml");
        
       BookShopServiceImpl bookShopSe
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值