下篇:可管理的pojo持久性
在java虚拟机(jvm)里面,所有数据都被建模,并且被封装在树结构的类与对象中.然而,在后端关系数据库中,数据被建模成关系表,它们通过共享的键字段相互关联起来.同一数据却有两个不同的视图,这给企业java的开发人员带来了挑战:如果你要把数据保存到持久性数据存储区,或者从持久性数据存储区获取数据,就必须在对象与关系表示之间来回转换数据,这个过程就叫作对象-关系映射(orm).在java ee(java企业版,以前叫j2ee)中,可以通过两个方法来完成对象-关系映射.
● 人工方法:使用java数据库连接性(jdbc)直接处理持久性——这个简单的解决方法适用于简单的应用程序.jdbc api的类紧密地按照关系数据库里面的表.行与列进行建模.但必须在应用程序的内部对象模型与jdbc对象模型之间进行人工转换,如果应用程序的内部模型已经类似二维关系表,采用jdbc是最佳方法.
● 自动方法:可以把orm任务交给框架去处理.框架通常提供了可以处理任何数据对象的api.通过这个api,可以保存.获取及查找数据库.框架在后台完成对象-关系的转换.因为针对特定关系的sql查询不适合对象接口,orm框架通常定义了自己的查询语言,可以为当前的关系数据库自动生成正确的sql语句.对数据模型复杂的应用程序而言,基于框架的方法可以节省许多时间,并且减少出错.
orm 框架
ejb 实体bean是java ee中的“官方”orm解决方案.不过在ejb1.x与2.x中,实体bean使用起来非常困难,这有两个原因:
● ejb 1.x与2.x实体bean必须符合严格的组件模型.每个bean类必须实现本地接口与业务接口.它们必须从某些抽象类继承而来,还要实现所有方法,即便许多方法是空的.有了这样一种严格的组件模型,就不可能利用ejb 1.x与2.x实体bean来构建面向对象的数据模型.
● ejb 1.x与2.x容器需要极其冗长的xml配置文件把实体bean映射到关系数据库里面的表.那些文件非常冗长,还容易出错.
简而言之,ejb 1.x与2.x实体bean是一种设计拙劣的orm框架,既满足不了java数据对象模型的需求,也满足不了关系表数据模型的需求.出于对ejb 1.x与2.x实体bean的不满,开发人员寻求orm的其他方案.在实际环境中,采用开放源代码的hibernate(由jboss公司开发)与oracle公司的toplink是两个最成功的java orm框架.hibernate与toplink都基于pojo:它们不依赖任何预定义的组件模型.相反,它们获得pojo数据对象(采用简单的javabean格式)后,会自动解释如何把这些数据对象以及它们之间的关系映射到关系数据库.通常,一个javabean类映射到一张数据库表,类之间的关系通过表里面的外来键字段进行映射.可以在简单.直观的xml配置文件里面指定orm元数据,譬如与javabean类相对应的表名以及与属性相对应的列名.可以通过框架中的工具类(如hibernate中的session类)来操作这些pojo(譬如保存.获取及查找).... 下一页