JAVA的事务
2.1、java事务有几种
三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。
2.2、java事务简述
事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。如果任何一个SQL操作失败,那么整个操作就都失败,所有操作都会回滚到操作前状态,或者是上一个节点。
2.2.1、java事务和数据库事务的关联
一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。
2.3、Java三种事务的意义
1、JDBC事务
JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手动提交。
使用 JDBC 事务界定时,可以将多个 SQL 语句结合到一个事务中。
特点:事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。
2、JTA(Java Transaction API)事务
允许程序执行分布式事务处理,使用此事务,需要一个实现javax.sql.XADataSource、javax.sql.XAConnection和javax.sql.XAResource接口的JDBC驱动程序,一个XADataSource对象就是一个XAConnection对象的工厂,XAConnections是参与JTA事务的JDBC连接,对于XA的连接不能调用java.sql.Connection.commit()或者java.sql.Connection.rollback()
而是应该调用UserTransaction.begin()、UserTransaction.commit()和
UserTransaction.rollback()。
特点:可以跨越多个数据库,功能强大,使用复杂
3、容器事务
容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。
2.3.1、JAVA三种事务的差异
1、JDBC事务控制的局限性是在一个数据库连接内,但其使用简单。
2、JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。
3、容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。
4、总结,Java事务控制是构建应用不可缺少的一部分,合理选择使用何种事务对整个应用系统来说至关重要。一般说来,在单个JDBC连接的情况下可以选择JDBC事务,在跨多个连接或者数据库情况下,需要选择使用JTA事务,如果用到了EJB,则可以考虑使用EJB容器事务
2.4、Java事务的特性
原子性、隔离性、一致性、持久性
- 原子性(Atomicity):
事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。 - 一致性(Consistency):
当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。 - 隔离性(Isolation):
对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖 于或影响其他事务。 - 持久性(Durability):
事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的持久性。
2.5、Java事务的隔离级别
(default)默认、(read_uncommitted)读未提交、(read_committed)读已提交、(repeatable_read)可重复读
串行话(Serializable):可避免脏读、不可重复读、幻读的发生。
可重复读(Repeatable read):可避免脏读、不可重复读的发生。
读已提交(Read committed):可避免脏读的发生。
读未提交(Read uncommitted):最低级别,任何情况都无法保证。
三、JAVA中类的继承和多态
3.1、类的继承
继承是一个“是”的关系,这个类既是一个新的类,也是其所继承的那个类
在java中使用extends关键字来表示继承关系时候,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承!也就是说所有类都是Object类的子类!!!!
注意事项:
1.基类不含默认无参构造函数,派生类必须显式调用基类的有参构造函数。
2.Java 中的继承来说是单继承,即一个类最多只能显示地继承于一个父类,但是一个类可以拥有多个子类。
3.派生类并不是基类的子集,而是比基类包含更多的信息和方法。
4.父类的构造方法以及父类的private的变量与方法是不会被继承的!
3.2、多态
面向对象时有三大特性:封装性、继承性、多态性。
多态 - - -
extends继承或者implements
实现,无论是类与类之间的继承、类与接口之间的实现还是接口与接口间的继承,反正总会出现上下的层次关系,这种关系的产生就是多态性出现的前提.多态性的体现,其实就是一句话,父类引用指向子类对象
封装 - - -
使用权限修饰符
使用private作用在属性上,关闭直接访问的入口
使用public作用在方法上,提供调用的入口
3.3、重写和重载
重载:参数列表不同,方法名都相同。
重写:1.在具有继承关系的不同类里面。2.参数列表相同,方法名也相同。
3.4、多态的必要条件
Java实现多态的三个必要条件:继承、重写、向上转型(基类的引用可以引用派生类的对象)!·
四、抽象类和接口
4.1、抽象类和接口的区别
抽象类 ·:
构造方法:有构造方法,用于子类实例化使用。
成员变量:可以是变量,也可以是常量。
成员方法:可以是抽象的,也可以是非抽象的。
接口:
构造方法:没有构造方法
成员变量:只能是常量。默认修饰符:public static final
成员方法:jdk1.7只能是抽象的。默认修饰符:public abstract (推荐:默认修饰符请自己永远手动给出)
jdk1.8可以写以default和static开头的具体方法
类和接口的关系区别
类与类:
继承关系,只能单继承。可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
类还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
4.2、普通类和抽象类的区别
普通类中不可含有抽象方法,可以被实例化
抽象类:则抽象类中所有的方法自动被认为是抽象方法,没有实现过程,不可被实例化
抽象类的子类,除非也是抽象类,否则必须实现该抽象类声明的方法