版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://aumy2008.blogbus.com/logs/14192019.html
事务与并发
数据库事务事务是指由一个或者多个sql语句组成的工作单元,这个工作单元中的SQL语句相互依赖,如果一个SQL语句执行失败,就必须撤销整个工作单元。在并发环境中,当多个事务同时访问相同的数据资源时,可能会造成各种并发问题。可以通过设定数据库系统的事务隔离级别来避免各类并发问题,此外,在应用程序中还可以采用悲观锁和乐观锁来解决丢失更新这一并发问题。
数据库事务(原子性A、一致性C、隔离性I、持久性D)、事务隔离级别、悲观锁和乐观锁;在应用程序中声明事务边界、设置事务隔离级别及运用悲观锁和乐观锁的方法。
一、声明事务边界
声明事务包含以下内容:
l 事务的开始边界
l 事务的正常结束边界(COMMIT):提交事务,永久保存被事务更新后的数据库状态。
l 事务的异常结束边界(ROLLBACK):撤销事务,使数据库退回到执行事务前的初始状态。
数据库系统支持以下两种事务模式:
l 自动提交模式:每个SQL语句都是一个独立的事务,执行完后,自动提交事务。
l 手动提交模式:必须由数据库的客户程序显式指定事务开始边界和结束边界。
注:在MySQL中,数据库表分文三种类型:INNODB、BDB和MyISAM类型。其中前两种支持数据库事务,而后一种不支持事务。在MySQl中用create table语句新建的表默认为MyISAM类型。如果希望创建INNODB类型的表,可以采用以下形式的DDL语句:
CREATE TABLE ACCOUNTS(…..) type= INNODB;
对于已经存在的表,更改:
Alter table ACCOUNTS type= INNODB;
1、在mysql.exe程序中声明事务
2、通过JDBC API声明事务边界
3、通过Hibernate API声明事务边界
二、多个事务运行时的并发问题
并发问题归纳为以下几类:
l 第一类丢失更新:撤销一个事务时,把其他事务已经提交的更新数据覆盖。
l 赃读:一个事务读到另一个事务未提交的更新数据。
l 虚读:一个事务读到另一个事务提交的新插入的数据。
l 不可重复读:一个事务读到另一个事务已经提交的更新数据。
l 第二类丢失更新:这是不可重复读中的特例,一个事务付给另一个事务已提交的更新事务。
三、数据库系统的锁的基本原理
四、数据库的事务隔离级别
五、在应用程序中采用悲观锁和乐观锁
映射继承关系在域模型中,类与类之间除了关联关系和聚集关系,还可以存在继承关系。
在面向对象的范畴中,还存在多态的概念,多态建立在继承关系的基础上。
三种映射方式:
l 继承关系树的每个具体类对应一个表
l 继承关系树的跟类对应一个表
l 继承关系树的每个类对应一个表
1、继承关系树的每个具体类对应一个表
2、继承关系树的跟类对应一个表
3、继承关系树的每个类对应一个表
4、选择继承关系的映射方式
5、映射多对一多态关联
Java集合类l Set(集):无序、无重复对象。他的有些实现类能按特定方式排序。
l List(列表):按索引位置排序,可重复,语序按照对象在集合中的索引位置检索对象。
l Map(映射):集合中的每个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。它的有些实现类能对集合中的键对象进行排序。
HashSet、TreeSet;HashMap、TreeMap
映射值类型集合(Set、List、Map) 映射实体关联关系前边介绍了映射一对多关联关系的方法,这是域模型中最常见的关联关系。现在介绍另外两种关联关系的映射:一对多关联和多对多关联。
1、映射一对一关联
如果是从头设计域模型和数据模型,应该优先考虑组成关系。
Hibernate提供了两种映射一对一关联关系的方法:
l 按照外键映射
l 按照主键映射
2、映射单向多对多关联
在关系数据模型中,无法直接表达表和表之间的多对多关系,需要建立一个连接表,它同时参照上边两个表。
3、映射双向多对多关联关系
Hibernate高级配置Java应用的运行环境可分为两种:
l 受管理环境:
l 不受管理环境:
Hibernate高级配置包括:
l 配置数据库连接池
l 配置事务类型
l 把SessionFactory域JNDI绑定
l 使用XML格式的配置文件
Hibernate与Struts框架Struts是基于MVC的Java Web应用框架,它把Java Web应用分为模型、视图和控制器三层。模型由实现业务数据和业务逻辑的JavaBean或EJB组件组成,控制器由ActionServlet和Action来组成,视图由一组JSP文件组成。
模型是应用中最重要的一部分,它包含了业务数据和业务逻辑。模型应该和视图以及控制器之间保持独立。在分层的框架结果中,位于上层的视图和控制器依赖于下层模型,而下层模型不应该依赖上层的视图和控制器。
注:在Struts框架中,把数据库层和持久化层统统归并为模型层,对模型做了细化,把它分为模型层、持久层和数据库层。
1、实现业务数据
业务数据在内存中表现为实体域对象,在数据库中表现为关系数据。实现业务数据包含以下内容。
l 设计域模型,创建实体域对象。
l 设计关系数据模型,创建数据库Schema。
l 创建对象-关系映射文件。
2、实现业务逻辑
持久化层用Hibernate中间件,模型层通过Hibernate API访问持久化层,而控制层的Action通过业务代理接口访问模型层。业务实现类则实现业务代理访问接口。
结束!