1、持久化,DAO和ORM三个概念以及他们的关系。
1.1.1持久化
数据在计算机中的两种状态:
瞬时状态:保存在内存中的程序数据,程序退出后,数据就消失了,成为瞬时状态
持久状态:保存在磁盘上的程序数据,程序退出后依然存在,成为程序数据的持久状态
持久化:将程序数据在瞬时状态和持久状态之间的相互装换机制
1.1.2DAO
DAO的全称为Data Access Object(数据访问对象)
DAO与持久化的关系:DAO一种程序数据访问层(持久化层)的设计思想。
DAO不仅仅是其中DAO类,DAO完整组建如下:
DAO工程类(工程设计模式)
DAO接口(一个)
实现了DAO接口的具体类(一个或多个)
数据传输对象(dto,vo,pojo类)
DAO接口中声明常用的保存查询等方法,这样利用面向接口编程,业务逻辑层声明接
口,提高程序的可扩展性。
现在我们开发应用程序主要的数据源是数据库,但它还有可能是如xml文件,文本文
件等这样的系统,不同的数据源存在不同的访问方式,即便是相同的数据源也存在不同的访
问方式。DAO实现类针对不同的数据源编写不同的实现(IMPI),即便是相同的数据源,针对
不同的访问方式也可以编写不同的实现。
DAO工厂类根据不同的数据源与访问特性生产对应DAO产品,共业务逻辑类使用。
值对象就是一个实体类,封装一条数据。
1.1.3ORM
ORM的全称为Object-Relational Mapping(对象关系映射)。
ORM与DAO关系式:ORM是DAO接口针对关系型数据库的一种实现,本质上就是一个DAO
实现类。
现在我们开发的项目大多为关系数据库,而在应用程序中表示数据的为某个实体类对
象:利用程序我们把一个实体类的数据转化为关系型数据库表中的一行数据,或者把关系型数
据库表中的一行数据转化为应用程序中的一个实体类,我们把:
“完成应用程序对象数据dao关系型数据映射的机制称为对象-关系映射”
1.2ORM框架
我们可以自己编写ORM的实现,其实在使用hibernate前,只要你编写的程序中有实体
类,那你的开发就可以理解为已经使用了ORM了。
当然,自己编写各种实现使我们将大量的精力耗费在无止境的繁琐DAO编写中,这样有
ORM框架出现帮我们处理这些繁琐的代码。
Hibernate http://www.hibernate.org
iBatis http://www.ibatis.con
Apache OJB http://da.apache.org/ojb
TopLink http://www.oracle.com/toplink/overview
Castor JDO http://www.castor.org/jdo.html
我们把Hibernate的框架成为ORM思想的一个个优雅实现,优雅原因:
1、不需要编写复杂的SQL语句
2、自动交换数据
3、免去繁琐的rsdao实体类,或实体类到sql的转换
4、数据库对用户来说是透明的,不用关系底层的数据库,专注于OO领域的业务实体。
1.3JPA简介
1.3.1框架的遗憾
各种框架式那么优雅的实现了ORM思想。但问题来了,以前开发使用的是hibernate框架,
新的项目要使用OJB,需重新学习。
SUN制定了ORM规范,命名为JPA。
1.3.2JPA规范
1.3.2.1JPA是什么:java持久化应用程序接口。
JPA的全称是Java Persistence API,它通过注解或XML描述的方式完成对象关系映射。
同时,JPA就是一个ORM规范,具体点就是一些类(很少)和接口(很多)的集合。
JPA实现:
Oracle提供TopLink实现
Bea提供KODO实现
JBoss提供Hibernate EntityManager实现
其他厂商的实现...Apache OpenJPA
你可以暂时把JPA理解为是一些接口的集合,各个框架就实现了这些接口,所以只要掌握了JPA规范就可以使用所有实现框架。
1.3.2.2JPA规范包含内容
ORM映射元数据,JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。