zoukankan      html  css  js  c++  java
  • 我的学习之路_第二十二章_事务

    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对象的事物隔离级别更改为给定的级别.

  • 相关阅读:
    stanford nlp 3.8.0 parser输出的问题
    stanford nlp 3.8.0 parse中通过java程序获取root节点
    spring boot 项目中hanlp的配置(可增加自定义词典)
    springmvc jsonp 跨域调用的例子
    滚动字幕Marquee
    table-列组
    限时抢购-倒计时
    canvas基础绘制-绚丽时钟
    canvas基础绘制-绚丽倒计时
    JS进阶-闭包的几种常见形式
  • 原文地址:https://www.cnblogs.com/jia-/p/7096697.html
Copyright © 2011-2022 走看看