Spring(五)spring与事务

Spring(五)spring与事务,第1张

Spring(五)spring与事务 Spring事务:
1、什么是事务
事务是一组sql语句的集合,集合中有多条sql语句
我们希望这些sql语句都能成功或者失败,这些sql语句的执行是一致的,作为一个整体

2、在什么时候使用事务
当我的 *** 作涉及到多个表买或者是多个sql的增删改,需要保证都是成功或者是失败
才能完成我的功能,保证 *** 作是符合要求的。 在java程序中写程序,控制事务,事务应该放在哪里?
service类的业务方法上,因为业务方法会调用多个dao方法,执行sql语句

3、通常使用jdbc访问数据库,还是mybatis访问数据库,怎么处理事务
jdbc connect.commit(); connect.rollback();
mybatis sqlsession.commit(); sqlsession.rollback();

4、3问题中事务的处理方式,有什么不足
    1、不同的数据库访问技术,使用的对象不同,方法不同
    需要了解不同的数据库技术使用事务的原理
    2、掌握多种数据库中事务的处理逻辑,什么时候提交事务,什么时候回滚事务
    3、处理事务的多种方法     总结:多种的数据库访问技术,有不同的事务处理的机制,对象,方法

5、怎么解决不足
spring提供一种处理事务的统一模型,能使用统一步骤,方式完成多种不同数据库访问技术的事务处理

6、处理事务,需要怎么做,做什么
spring处理事务的模型,使用的步骤都是固定的
把事务使用的信息提供给spring就可以
    1、事务内部提交,回滚事务,使用的事务管理器对象,代替你提交,回滚。
       事务管理器是一个接口和它的众多实现类
    怎么使用:告诉spring,你用的是那种的数据库访问技术,怎么告诉?
            声明数据库访问技术对于的事务管理器实现类,在spring的配置文件用bean声明     2、你的事务方法需要什么样的事务,说明需要的事务类型
        说明方法需要的事务:
            1、事务的隔离级别
                READ_UNCOMMITTED:读未提交,未解决任务并发问题
     Oracle默认:READ_COMMITTED:读已提交,解决脏读,存在重复读,存在幻读
      Mysql默认:REPEATABLE_READ:可重复读,解决脏读,不可重复读,存在幻读
                SERIALIZABLE:串行化,不存在并发问题
            2、事务的超时时间
            表示一个方法的最长的执行时间,如果方法执行时超过了时间,事务就回滚
            3、事务的传播行为
            控制业务方法是不是有事务的,是什么样的事务
            7个传播行为,表示你的业务方法调用时,事务在方法之间是如何使用的
            PROPAGRTION_REQUIRED
            PROPAGRTION_REQUIREDS_NEW
            PROPAGRTION_SUPORTS
            以上三个需要掌握
            PROPAGRTION_MANDATORY
            PROPAGRTION_NESTED
            PROPAGRTION_NEVER
            PROPAGRTION_NOT_SUPORTED
      3、事务提交事务,回滚事务的时机
         1、当你的业务方法,提交成功,没有异常抛出,当方法执行完毕,spring在方法执行后提交事务
         2、当你的业务方法执行时抛出异常或者ERROR,spring执行回滚,调用事务管理器的rollback
         3、当你的业务方法抛出非运行时异常,主要是受查异常,提交事务
            受查异常:在你写代码时必须处理的异常。
总结:
1、管理事务的是 事务管理和他的实现类
2、spring的事务是一个统一事务管理模型
    1、指定要使用的事务管理器实现类,使用bean
    2、指定哪些类,哪些方法需要加入事务的功能
    3、指定方法需要的隔离级别,传播行为,超时 你需要告诉spring,你的项目中类信息,方法的名称,方法的事务传播行为

spring中提供的事务处理方案
1、适合中小项目提供的,注解方案
    spring框架注解用aop实现给业务方法增加事务的功能,使用
    @Transactional注解增加事务 使用步骤:
1、需要声明事务管理类标签 2、开启事务注解驱动,告诉spring框架,我要使用注解的方式管理事务
   spring使用aop机制,创建@Transactional所在的类代理对象
   给方法加入事务的功能
   spring给业务方法加入事务
        在业务方法执行之前,开启事务,在业务方法之后提交事务,使用aop的环绕通知 3、在你的方法上面添加@Transactional

2、适合大型项目,有很多的类,方法,需要大量的配置事务,使用aspectJ框架功能
在spring配置文件中声明类,方法需要的事务,这种方式业务方法和事务配置完全分离 实现步骤:都是在配置文件中实现
1、要使用aspectJ,加入依赖
2、声明事务管理器对象
3、声明方法需要的事务类型(配置方法的事务属性(隔离级别,传播行为,超时))
4、配置aop:指定哪些类要创造代理

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5709897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存