数据库持久化的深入理解

来源:互联网 发布:php memorylimit 编辑:程序博客网 时间:2024/05/10 03:17

何谓“持久化”
持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

 

何谓“持久层”
持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

 

何谓“对象数据映射(ORM)”
ORM-Object/Relational Mapper,即“对象-关系型数据映射组件”。对于O/R,即 Object(对象)和Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。

备注:建模领域中的 ORM 为Object/Role Modeling(对象角色建模)。另外这里是“O/R Mapper”而非“O/R Mapping”。相对来讲,O/R Mapping 描述的是一种设计思想或者实现机制,而 O/R Mapper指以O/R原理设计的持久化框架(Framework),包括 O/R机制还有 SQL自生成,事务处理,Cache管理等。

 

以前本坛有位道友专门写了一篇持久层的文章,还有图片,可惜图片现在不在了。

“持久化”这个概念是和“暂时”等概念相对的,数据在计算机中有一般有两个存储地,内存为暂存,因为电源关机就会数据丢失,如果需要反复使用,就要持久保存,实现持久化了。

持久化现在有多个途径,如数据库和文件等。

持久层是J2EE中实现持久化的一个层次,由于它和数据库等具体技术打交道,而且不同数据库提供的接口不一致,因此,有4个指标来衡量持久化技术的选择:
1. 性能--> 高性能,最好能直接使用具体数据库特性
2. 通用--> 可移植,在不同数据库之间移植
3. 方便--> 使用方便,o/R mapping非常方便
4. 安全--> 事务机制好,很好地支持CAID等。

 

数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.
数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
cmp和Hibernate只是对象模型到关系模型之间转换的不同实现。只不过对象模型和关系模型应用广泛,所以就会误认为数据持久化就是对象模型到关系型数据库的转换罢了。

举例来说,比如要完成一个购物打折促销的程序,用 ORM 思想将如下实现(引自《深入浅出Hibernate》):
业务逻辑如下:
public Double calcAmount(String customerid, double amount) 
{
    // 根据客户ID获得客户记录
    Customer customer =CustomerManager.getCustomer(custmerid); 
    // 根据客户等级获得打折规则
    Promotion promotion =PromotionManager.getPromotion(customer.getLevel()); 
    // 累积客户总消费额,并保存累计结果
   customer.setSumAmount(customer.getSumAmount().add(amount); 
    CustomerManager.save(customer); 
    // 返回打折后的金额
    return amount.multiply(protomtion.getRatio()); 
}
这样代码就非常清晰了,而且与数据存取逻辑完全分离。设计业务逻辑代码的时候完全不需要考虑数据库JDBC的那些千篇一律的操作,而将它交给 CustomerManager 和 PromotionManager 两个类去完成。这就是一个简单的 ORM 设计,实际的 ORM 实现框架比这个要复杂的多。


目前有哪些流行的 ORM 产品?
目前众多厂商和开源社区都提供了持久层框架的实现,常见的有
ApacheOJB (http://db.apache.org/ojb/)
Cayenne (http://objectstyle.org/cayenne/)
Jaxor(http://jaxor.sourceforge.net/)
Hibernate(http://www.hibernate.org/)
iBatis(http://www.ibatis.com/)
jRelationalFramework(http://ijf.sourceforge.net/)
mirage(http://itor.cq2.org/en/oss/mirage/toon)
SMYLE(http://www.drjava.de/smyle)
TopLink(http://otn.oracle.com/products/ias/toplink/index.html)

参考文献:

1、《深入浅出Hibernate》
2、《精通Hibernate:Java对象持久化技术详解》