JDO查询语言

几个词的翻译,不一定准确,呵呵。
context, 环境。
Collection,集合。有时指java.util.Collection对象,有时不是。
Class,类别。当表示一个类型的含义时,翻译成了“类别”,有type之意。

JDOQL: JDO Query Language
JDO提供的API与QL克服了其他同类技术的缺陷。
前言

Java开发者们使用序列化、JDBC和CMP持久化应用系统中的数据部分,但是这三种常用的方法都有不足之处。JCP定义了持久化Java对象模型的透明层JDO,并在2002年3月将其列入标准。在此标准中还定义了一种新的查询语言,称之为“JDOQL”,并要求所有厂商必须实现它。下面就让我们来看一下这种语言究竟是如何工作的吧。
现有持久化机制的局限当前常用的持久化机制—序列化,JDBC,CMP都有不足之处:• 序列化机制与Java语言绑定的太紧了,虽然存储对象非常方便,但是缺乏查询机制和数据库的健壮性。•JDBC提供了Java程序与SQL直接的操作接口,但它使用的是SQL的数据模型,其中只有行、列概念,不能直接存储对象。虽然JDBC确实提供了数据库具有的特性,如事务和查询,但它使用了某一中特定的SQL,从而限制了应用系统的移植性。• 开发者们使用EJB,这样他们可以使用CMP来为他们的数据建立对象模型。但是EJB诞生时的基本假定是分布式的网络计算,而在细粒度的情形下效率问题让人担忧。
    JDOQL由一组API加一个布尔型的过滤器构成,它与底层的数据库结构隔离的非常清楚。那么就是说,JDOQL在底层应该可以支持关系数据库语言SQL,对象查询语言OQL,甚至支持直接对二进制库的调用等。
    JDO定义了一个称为javax.jdo.Query的接口。在JDO的事务环境下,操作对象实例的基本接口是PersistenceManager,Query对象也就是通过此接口而创建的。在一个PersistenceManager环境下,你可以创建多个Query实例。
Query的构成

    JDOQL中查询的基本执行过程是,先对一个候选实例(candidate instances)集合进行过滤,然后返回所有满足条件的对象实例。注意这里说的是“所有”,那么是说返回的还是一个集合,即使只有一个对象也还是放在集合里面了。这一点在后文中我们还将涉及到。通常情况下,定义预先要过滤的集合范围也是必要的,那么是说候选实例集合只能是同一个类别(通过指定,可以是一个类别,或概类别的子类别)。如果想这么做的话,可以向查询中传入java.util.Collection或javax.jdo.Extent参数。
    JDO定义了Extent接口(顾名思义,这里extent是“范围”的意思),它表示数据库中的候选实例应是某一特定类别的集合。在PersistenceManager接口中有一个getExtend()方法,用于获得此对象。过滤器是一个字符串,包含的是结果为Boolean的查询表达式,可以不指定过滤器,默认结果值为true。
    PersistenceManager接口中有7个创建Query实例的方法:
Query newQuery();
Query newQuery(Class cls);
Query newQuery(Class cls, Collection c);
Query newQuery(Class cls, String filter);
Query newQuery(Class cls, Collection c, String
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值