Java 数据对象(JDO)介绍(一)

<script language=javascript>showbanner(6,6);</script> <script type=text/javascript>google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =240;google_ad_format = "120x240_as";google_ad_channel="3662469727";google_color_border = "CCCCCC";google_color_bg ="FFFFFF";google_color_link = "000000";google_color_url ="666666";google_color_text = "333333";</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript></script>
介绍
Java 数据对象 (JDO)  是一个存储Java对象的规范.   它已经被JCP组织定义成JSR12规范。JDO的第一个版本在2000年6月6日提交并在2002年4月30日正式发布1.0版本规范。
规范的两个主要目的是提供数据处理和访问机制的API以及允许规范的实现作为应用服务器的一部分。 

JDO 和 JDBC
JDBC和JDO都是Java调用数据库的APIs。区别在于,他们访问数据存储的具体方法不同。JDBC提供了一种非常好的机制,它可以使应用程序代码与具体的数据库厂商和数据库位置无关。在大多数情况下数据存储使用的是关系数据库。但是当使用JDBC驱动运行在一个非关系数据库时就不是很好了。而对于JDO来说,运行在它之下的数据库就可以是一个关系数据库,面向对象的数据库或者其他完全不同的数据库。在JDO运行于关系数据库之上时,它可以通过JDBC很好的完成数据存储。而这一切对于开发人员来说都是透明的,所有实现都有JDO本身来完成。

JDBC不支持面向对象的数据库表示。JDBC数据库表示完全围绕关系数据库模型。这常常导致书写代码时在应用程序和数据库之间存在一个中间层。这个层的作用也许是分解Java对象。分解Java对象的过程会对使用的对象稍作改变,这样对象才能存储到关系数据库之中。同样的必须存在一种机制来把数据库中的记录转换成适当的Java对象。JDO与JDBC刚好相反,他的数据库标示完全面向对象。这种机制并不新奇,在一些面向对象数据库中已经使用了这种机制。
JDBC的查询语言一般都是用SQL。JDO的查询语言看起来与Java更接近。使用JDO无需再专门学习一种查询语言比如SQL。如果你会用Java那么你就能够使用JDO的查询语言。 

JDO实现JDO规范定义了JDO实现的接口已经JDO实现的内容。SUN提供了一个JDO规范的参考实现,但是在2002年5月份发布的版本中它并没有完全实现规范中所要求的内容。还有众多的厂商提供的JDO实现可以使用。在下面的表格中列出了一部分。 

厂商 产品 
SolarMetric Kodo JDO  
Signsoft intelliBO  
Poet FastObjects  

API
javax.jdo.spi.PersistenceCapable
任何被JDO实现控制的类都必须扩展PersistenceCapable接口。任何扩展PersistenceCapable接口的类的实例都可以看作是一个“JDO实例”。这个接口定义了JDO实现使用的方法来控制类的实例。 

    public abstract javax.jdo.PersistenceManager jdoGetPersistenceManager();
    public abstract void jdoReplaceStateManager(javax.jdo.spi.StateManager) 
            throws SecurityException;
    public abstract void jdoProvideField(int);
    public abstract void jdoProvideFields(int[]);
    public abstract void jdoReplaceField(int);
    public abstract void jdoReplaceFields(int[]);
    public abstract void jdoReplaceFlags();
    public abstract void jdoCopyFields(Object, int[]);
    public abstract void jdoMakeDirty(String);
    public abstract Object jdoGetObjectId();
    public abstract Object jdoGetTransactionalObjectId();
    public abstract boolean jdoIsDirty();
    public abstract boolean jdoIsTransactional();
    public abstract boolean jdoIsPersistent();
    public abstract boolean jdoIsNew();
    public abstract boolean jdoIsDeleted();
    public abstract javax.jdo.spi.PersistenceCapable 
            jdoNewInstance(javax.jdo.spi.StateManager);
    public abstract javax.jdo.spi.PersistenceCapable 
            jdoNewInstance(javax.jdo.spi.StateManager, Object);
    public abstract Object jdoNewObjectIdInstance();
    public abstract Object jdoNewObjectIdInstance(String);
    public abstract void jdoCopyKeyFieldsToObjectId(Object);
    public abstract void jdoCopyKeyFieldsToObjectId(
            javax.jdo.spi.PersistenceCapable.ObjectIdFieldSupplier, Object);
    public abstract void jdoCopyKeyFieldsFromObjectId(
            javax.jdo.spi.PersistenceCapable.ObjectIdFieldConsumer, Object);
    
通常会有一个由JDO实现厂商提供的工具来完成普通的Java类到“JDO实例”类的转化。这个工具可能通过不同的方法来实现。第一种方法是通过字节码增强器来实现。一个JDO字节码增强器把普通的Java类转换成“JDO实例”类的过程就是把扩展PersistenceCapable接口的方法的代码加到类中。第二种方法是使用一个代码生成器,它解析现有的普通Java代码然后输出一个扩展了PersistenceCapable接口的新版本的代码。如果通过手工方式来扩展这个接口是没有好处的。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值