我的学习之路_第二十二章_事务

JDBC事务


【事务】


作用: 保证多条SQL语句,要么都执行成功,要么都执行失败.


mysql数据库,执行SQL语句,自动开启事务,提交事务,回滚事务,把数据永久保存


oracle数据库,执行SQL语句,手动开始会务,提交事务,回滚事务,把数据永久保存.


Connection接口中和事务有关的方法:


无返回值 setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态.


参数:autoCommit : true表示自动提交模式, false表示禁用自动提交模式
要把autoCommit设置为false,让事务手动开启




无返回值 commit()  如果多条SQL语句都执行成功,提交事务


无返回值 rollback()  有一条SQL语句执行失败,就回滚事务,把数据回滚到开启事务之前的状态.




【DBUtils工具类】


QueryRunner(DataSource ds)


QueryRunner会自动从连接池获取连接,使用完毕归还连接,自动管理事务




QueryRunner()  空参数构造方法,可以手动控制事务


调用update和query方法时需要手动传递连接对象
连接对象Connection可以使用C3P0工具类获取




【分层管理】


dao层(data access object) : 数据访问层


Service : 业务层


Wed 层: 给用户看的


★分层的目的 : 解耦    可维护性   可扩展性    可重用性




▲不同的层次,使用不同的包表示:


com.itcast   一般为公司域名倒写


com.itcast.dao dao层

com.itcast.service service层


com.itcast.domain javabean层(实体层)


com.itcast.utils 工具层


com.itcast.wed wed层






java.lang.ThreadLocal<T>

该类提供了线程局部变量,用于当前线程中共享数据.ThreadLocal工具类底层就是一个Map集合,
key存放的当前线程,value存放需要共享的数据.


没有返回值 set(T  value)  将此线程局部变量的当前线程副本中的值,设置为指定值
T  value: T就是创建对象时,指定的数据类型value就是共享的数据.


返回值 : T get() 返回次线程局部变量的当前线程副本的值.




连接管理类抽取(ConnectionManager类)


1,获取连接的功能
需要把获取的连接对象放入ThreadLocal
保证一个线程存储完Connection之后,不管获取多少此Connection都是同一个connection
2,开启事务功能
3.提交事务功能
4.回滚事务的功能
5.关闭连接功能




【总结】


● 事务的特性:


1.原子性:强调事务的不可分割,多条语句要么都成功,要么都失败.
2.一致性:强调的是事务的执行的前后,数据要保持一致.
3.隔离性:一个事务的执行不应该受到其他事务的干扰.
4.持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库.


如果不考虑事务的隔离性,引发一些安全性问题:


▲脏读: 一个事务读到另一个事务还没有提交的数据


脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种
原因撤离对该值的修改,这就导致了T2所读到的数据是无效的.


▲不可重复读:一个事物读到另一个事务已经提交的update的数据,导致在当前的事务总多次查询结果不一致.


▲虚度/幻读 : 一个事务读到另一个事务已经提交的insert的数据,导致在当前的事务中多次的查询结果不一致.


【事务的隔离级别】


★ 1  read uncommitted   :未提交读.脏读, 不可重复读,虚读都可能发生.
★ 2  read committed :已提交读.避免脏读.但是不可重复读和虚读有可能发生.(oracle默认)
★ 4  repeatable read :可重复读.避免脏读,不可重复读.但是虚读有可能发生.(Mysql默认)
★ 8  serializable : 串行话的.避免脏读,不可重复读,虚读的发生.
级别越高,越安全,效率越低.



mysql中:


查看当前的事物隔离级别: SELECT@@TX_ISOLATION


更改当前的事物隔离级别: SET TRANSACTION ISOLATION LEVEL 四个级别之一.


设置隔离级别必须在事物之前.




Connection对象中设置级别的方法:  


没有返回值   setTransactionIsolation(int level) 试图将此connection对象的事物隔离级别更改为给定的级别.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值