本章首先给大家介绍持久化,ORM与DAO三个概念,以及它们之间的关系。
1.1持久化,DAO与ORM
介绍持久化,DAO与ORM三个概念,以及它们之间的关系。
1.1.1 持久化
数据在计算机中有两种状态:
瞬时状态:保存在内存的程序数据,程序退出后,数据就消失了,称为瞬时状态
持久状态:保存在磁盘上的程序数据,程序退出后依然存在,称为程序数据的持久状态。持久化的数据保存在各种文件中,这些文件有不同的后缀,表示不同的类型,这些不同后缀的文件,需要不同的软件读取它。
持久化:将程序数据在瞬时状态和持久状态之间相互转换的机制
图一:持久化
现在的项目大多使用三层构架,即:表示层,业务逻辑层(服务层),持久化层。这里的持久化层就是持久化的意思。
1.1.2 DAO
DAO的全称为Data Access Object(数据访问对象)。
DAO与持久化的关系是:DAO一种程序数据访问层(持久化层)的设计思想。
现在我们做的项目,数据源都为数据库,也就是说我们把数据都保存在数据库软件中。但有时候我们需要把数据保存在其它类型数据源中,如保存在一个xml文件中,或者保存在一个txt文件中。即便是保存在数据库中,我们访问的方式也有很多种,如全部使用Statement对象来完操作,或者全部使用PreparStatement来完成。并且项目需要在多种数据源之间切换,DAO模式就可以很好的解决这个问题。
DAO不仅仅是其中的DAO类, DAO完整组件如下:
Ø DAO 工厂类 (暂时不使用,使用工厂设计模式)
Ø DAO接口(一个)
Ø 实现了DAO接口的具体类 ,根据数据源或者数据访问方式的不同有一个或多个
Ø 数据传输对象(DTO),数据对象(VO),实体类,POJO。第一个:实现Serializable接口;第二,添加equals方法。
图二:DAO
DAO接口中声明常用的保存查询等方法,这样利用面向接口编程,业务逻辑层声明接口,提高程序的可扩展性。
现在我们开发应用程序主要的数据源是数据库,但它还有可能是如XML文件,文本文件等这样的系统,不同的数据源存在不同的访问方式,即便是相同的数据源也存在不同的访问方式。DAO实现类针对不同的数据源编写不同的实现(Impl),即便是相同的数据源,针对不同的访问方式也可以编写不同的实现。
DAO工厂类根据不同的数据源与访问特性生产对应的DAO产品,供业务逻辑类使用。
值对象就是一个实体类,封装一条数据。
1.1.3 ORM
ORM的全称为Object-Relational Mapping(对象关系映射)。
ORM与DAO的关系是:ORM是DAO接口针对关系型数据库的一种实现,本质上就是一个DAO实现类。
现在我们开发的项目数据源大多为关系数据库,而在应用程序中表示数据的为某个实体类对象;利用程序我们把一个实体类的数据转化为关系型数据库表中的一行数据,或者把关系型数据库表中的一行数据转化为应用程序中的一个实体类,我们把:
“完成应用程序对象数据到关系型数据映射的机制称为对象-关系映射”
图三:ORM
1.2 Hibernate
ORM,MVC都是思想。Struts1是MVC思想的一个实现框架;hibernate是ORM思想的一个实现框架。
我们可以自己编写ORM的实现,其实在使用hibernate前,只要你编写的程序中有实体类,那你的开发就可以理解为已经使用了ORM了。
当然,自己编写各种实现使我们将大量的精力耗费在无止境繁琐的DAO编写中,这样有ORM框架出现帮我们处理这些繁琐的代码。
下面是一些出名常用的ORM框架:
Ø Hibernate http://www.hibernate.org