持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
JDBC就是一种持久化机制。文件IO也是一种持久化机制。将鲜肉冷藏,吃的时候再解冻的方法也是。将水果做成罐头的方法也是。将人的脏器迅速冷冻,运输,然后解冻给人移植的技术也是。
1.持久层的位置
2.持久层实现模式
混杂模式:混杂模式是持久化功能的原始实现模式。即在业务类中混杂JDBC访问代码,从而提供所需的持久化功能。
基于Data Class的持久层实现模式
数据类(DataClass)作为业务类与持久层沟通的桥梁,起着承上启下的作用。常见的DAO模式就是这种模式的典型实现。DataClass实际上包含了DAO模式中的DomainClass/Object和Data Accessor Class。DomainClass作为对现实世界的抽象,起着信息携带者的作用,而Data Accessor Class则通过JDBC代码将DomainClass与数据库相关联。
基于现有持久层框架的实现模式
此模式是第二种模式的延伸。DataClasses所包含的Data Accessor和Domain Class数量并没有减少,只是把其中最繁琐的工作—基于JDBC的OR映射工作,交由第三方组件来完成。从而DataAccessor中的繁琐编码工作得到简化。
3.持久层可选方案
优 点
缺 点
SQL/JDBC
成熟,流行,使用DAO模式
代码繁杂,可读性差,维护困难,移植困难
Entity Bean
CMP(EJB1.1之后),未来的EJB3
错误的设计,不可移植,依赖性强,不可序列化,不支持多态的关联查询
JDO
简单,透明,标准
不够成熟
Apache OJB
性能、稳定性,属于Apache基金组织
文档资源太少,支持标准太多成了负担(ODMG 3.0,JDO1.0)
iBATIS
可以控制更多的数据库操作细节。实用于遗留系统的改造和对既有数据库的复用
持久层封装不够彻底,只是一个DBHelper
Hibernate
成熟、流行、功能强大。并逐渐发展成Java持久层事实上的标准
不够透明
4.什么是O/RMapping?
对象-关系映射是一门非常实用的工程技术,它实现了Java应用中的对象到关系数据库中的表的自动的(和透明的)持久化,使用元数据(meta data)描述对象与数据库间的映射。
O/R Mapping的优点:
提高生产率(Productivity) 可维护性(Maintainability)
更好性能(Performance) 厂商独立性(Vendorindependence)