spring事务管理

事务主要是解决数据的原子性一致性。

事务的四大特征:

            原子性:保证操作的完整性。  数据的操作动作要么完全完成,要么完全不起作用。

            一致性:在事务完成之前,必须保证所有的数据都是一致的

            隔离性:并发事务操作之间互不影响,在一个事务内部的操作不影响其他事务的操作,

                        这需要设置事务的隔离级别

            持久性:当事务完成时,数据库的改变必须是持久化的

事务并发场景和问题以及解决:

            当多个用户访问数据库时,这就是常见的事务并发,可能会出现的问题:

            1.脏读:一个事务内部读取到另一个事务未提交的更新数据

            2.不可重复读:一个事务两次读取同一行数据,两次得到数据可能不一样

            3.幻读:一个事务中执行了两次查询,但是第二次查询,比第一次差的数据多了一些数据行

            4.数据丢失更新:撤销事务时,把其他事务已经更新的数据给覆盖 了。

五个隔离级别:

    TRANSACTION_NONE JDBC 驱动不支持事务 
    TRANSACTION_READ_UNCOMMITTED 允许脏读、不可重复读和幻读。 
    TRANSACTION_READ_COMMITTED 禁止脏读,但允许不可重复读和幻读。 
    TRANSACTION_REPEATABLE_READ 禁止脏读和不可重复读,单运行幻读。 

    TRANSACTION_SERIALIZABLE 禁止脏读、不可重复读和幻读。

而隔离级别越高,那么并发处理的性能就越差,可以使用conn.setTransactionLevel来设置隔离级别

回忆一下jdbc的事务操作:

        使用时:把你涉及到对数据库的增删改操作放到try   catch中

                //获得连接

                     Connection conn = DriverManager.getConnection();

                   try{

                            //第一步先把jdbc设置为手动提交事物。

                            conn.setAutoCommit(false)

                            //操作一  增删改

                            //操作二 增删改

                            //当上面的操作不报错,就提交事物

                            conn.commit();  

                    }catch(Exception e){

                            //当上面的操作抛异常时。就会执行事务回滚操作

                            conn.rollback();

                            e.printStackTrace();

                    }finally{

                         //把连接关闭

                             conn.close();

                    }

spring事务管理:

        Spring事务管理的核心接口是:PlatformTransactionManager

          事务管理接口通过getTransaction(TransactionDefinition definition)方法来根据指定的事务的传播行为来返回一个当前

            活动的事务或者是创建一个新事务。事务的传播属性由TransactionDefinition这个类定义,里面有其中,默认是第一种,

            -1  表示,支持当前事务,没有事务就创建一个新的事物。


    spring的隔离级别也是五种,跟jdbc一一对应。


Spring配置事务管理器:

        需要在    Spring与框架整合配置文件中、或者  数据持久层框架配置文件中配置事务管理器

            tranactionManager。。。。

    操作事务两种方式:

            (1)编程式事务管理:

                                编程式事务管理。在配置文件中配置事务模板,和属性

                                


                                在需要事务管理的地方使用 transactionTemplate对象调用 execute()方法

            (2)声明式事务管理:

                            声明式事务分两种:

                                        1.是基于tx:aop:命名空间的xml配置文件方式                                                                                

                                

                                        2.是基于@Transactional注解方式

                                                常用的就是注解方式。简单方便,直接在需要事务的地方加上注解即可






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值