快速业务通道

JDO 2.0查询语言的特点及功能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
(Named Queries)

你可以在JDO描述符(metadata)中声明常用的JDOQL查询语句,这样就不用将查询嵌入到Java源代码中。这样可以提供一些灵活性,比如将查询语句写到一个配置好的文本文件中,而需要修改时可以直接改该文件,而不用更改Java源码。描述符中的每个查询都有一个名字,而要执行某个查询时,可以使用下面的方法来创建查询:

Query newNamedQuery(Class cls, String queryName)

JDO将会搜索描述符来找到对应的预定义查询语句并生成相应的Query对象。

访问静态字段(static fields)

你将可以在JDOQL中访问数据类中以public static final方式声明的常量。比如

public static final int FEMALE = 0; public static final int MALE = 1; public static final int UNKNOWN = 2;

而在查询中使用类似“salary > 5000.0 && gender == MALE”的过滤条件。

JDO 2.0查询语言的特点及功能(3)

时间:2010-12-04

批量删除(Deletion by Query)

在JDO1.0中,要删除一个对象,必须先将其载入内存,再删除,然而很多情况下,你在删除之前并不需要访问该对象,这样的做法比较低效。在JDO2.0中,提供了Query的几个方法来删除符合查询条件的一组对象:

Object deletePersistentAll(Object[] parameters) Object deletePersistentAll(Map parameters) Object deletePersistentAll()

此查询结果的对象会被全部从数据库删除。这些方法返回被删除对象的集合。你的程序可以决定是否需要对被删除的对象逐个访问。如果你不访问这些对象,Query执行的性能将不会受到任何影响,换句话说,这些对象将不会在内存中生成。

厂商扩展的查询特性

JDO厂商可以给JDOQL提供各种各样的特殊查询功能。每个厂商可以定义一组属于该厂商自己的扩展功能。如果你需要使用其中的功能,你需要将该厂商的扩展加到程序运行环境中。每个扩展有一个名字和一个可选的值。你可以单独设置每个扩展,或者一次性设置多个扩展。Query的下列方法用于设置厂商扩展特性:

void setExtensions(Map extensions) void addExtension(String key, Object value)

SQL直接访问

如果JDO2.0的查询功能不能满足需要,并且以下条件都满足:

你的应用运行在关系数据库上

你需要的查询有SQL语句可以实现

你知道从你的类模型到数据库的映射细节

你就可以创建一个SQL查询,方法是调用PersistentManger的方法:

Query newQuery(String language, Object query)

每一个参数需要设置为“javax.jdo.query.SQL”,而query是一个具体的SQL语句。如果你的查询需要返回类的实例,则这个SQL语句必须返回该类的相应主键字段。使用直接的SQL时,JDOQL提供的函数将不能被使用,否则将会扔出异常JDOUserException,比如,你不能对该Query设置过滤条件字符串、排序声明或变量声明。使用SQL查询时,参数都是未指定类型的,在SQL语句中以“?”表示,并且按出现的顺序被绑定。

结束语

各位读者已经看到,JDO2.0对查询语句增加了很多新的功能和特性,我认为其中的查询结果定义是最大的改进。正如我在文章开头说的,这一部分变化目前来说是JDO2.0中最稳定的部分,不会有大的变化。厂商可以开始提供很多这样的功能,不用考虑专家组还在讨论的JDO2.0其余部分将如何变化。

在JDO2.0提供标准的对象/关系映射的前提下,这里描述的查询功能和一个用于多层结构的JDO应用的脱钩/挂钩(detach/attach)机制,将使JDO占领更多的市场。对这一点有深切体会的厂商将不遗余力地争取率先推出稳定、完整、高效的JDO2.0产品。JDO将是基于数据库存储和管理的应用开发的首先API,开发人员们将享受面向对象的模型设计和高效的数据存储管理系统。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号