JDO 2.0查询语言的特点及功效[Java编程]
本文“JDO 2.0查询语言的特点及功效[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
查询语言的改良是JDO2.0标准中的重要环节,本文从较高的层面阐述JDO2.0所供应的一些新功效.由于JDO2.0标准还未进入公开草案状况,目前还没有任何内容敲定下来,一切都还大概面对改变.不过,JDO2.0将会很快进入最后阶段,而这里提到的查询特点是JDO2.0专家组(译者注:David Jordan就是专家组重要成员)耗费时间最多,并且相对来说最为安定.因此,我有充足来由相信,终究标准与这里的描写将会基本一致.
假如各位读者认为本文遗漏了某些重要的特点,倡议当即到JDO论坛(http://www.jdocentral.com/forums/index.php?showforum=10)去提出并谈论.这里我们需求感激JDO2.0标准带领人Craig Russell受权给我公开这些JDO2.0查询语言的新特点.
查询后果
我们首先从最深化的改良开始介绍.在JDO1.0中,查询后果老是你所指定的类的实例调集.考虑下面的UML类图,它表达了A、B、C、D四个类及之间的关系:
你可以成立一个对A类的查询,通过contains()引用到B类,再通过又一层contains()引用到C类,最后再利用一个“.”操作符引用到D类.但终究返回的调集合只会包含A类的对象实例,假如要从后果中得到别的类,就必须通过A类的引用来一一获得相关的别的类对象.假如你的查询条件里面包含了B、C或D类的约束,那么在后果集合通过A类对象引用别的类对象时,必须重新将这些约束在Java代码中反复一遍,也就是说,你不得不在Java和JDOQL中反复声明限制条件.再者,你大概只关心满意查询条件的D类对象,而不但愿中间的B、C类对象被JDO底层成立从而节俭内存或相关资源.
在JDO2.0中,你再也不受缚于这些限制了.你可以返回:
数据类(PersistentCapable)的一个或多个字段
候选类以外的别的类对象
统计数据
这意味着你可以返回A、B、C、D类对象,大概它们的某些字段,大概二者的混和后果.你还可以计算近似min或max之类的统计后果.基本上,你想返回什么后果都可以.
当你成立一个查询时,你可以指定一个“后果定义(Result Specification)”来指定返回什么样的内容.它是一个包含一个或多个以逗号脱离的“后果表达式(Result Expression)”.后果表达式可以是:
this关键字,表示返回候选类的对象实例.这与JDO1.0是一样的字段,标明候选类或引用类的某个字段的值,如 address.street.name 字段表达式,代表对多个字段举行JDO预定义的几种算术运算而得到的后果变量,代表查询条件中呈现的某此中间变量引用表达式,也就是JDO1.0中的通过“.”操作符举行的对象之间的引用 统计表达式通过对以上这几种后果表达式的组合应用,你可以得到任何你想要的后果.
JDO2.0支持下面的统计函数:
count(表达式),表达式可以是this
sum(数字型字段表达式),“数字型字段表达式”可以是通过字段或字段的运算得到的数字型的后果
min(数字型字段表达式)
max(数字型字段表达式)
avg(数字型字段表达式)
对查询后果的指定是通过下面的API:
void javax.jdo.Query.setResult(String result)
假如你不调用这个办法,大概参数是null,则返回候选类的对象实例(相当于设置为“this”),即JDO1.0的返回后果.假如你只指定了唯一后果表达式,则返回调集的元素范例与该后果的范例一致.别的,在默许方法下,假如指定了多个后果表达式,则返回的调集元素范例将是 Object[].
你可以在后果定义字符串的开首标上distinct来保证后果不会反复.而假如后果定义串中包含好几个表达式,那么distinct可以保证后果集合不会有反复的数据组.
每个后果表达式可以指定一个名称,关于简单的字段,系统会默许以该字段的名称作为后果中该项的名称.对复杂的表达式,你可以利用下面的语法指命名称:
result_expression as name
名称的利用可以让后果中的该项作为后果类中的一个属性来举行设置和利用.你可以指定一个后果类(result class),用来返回查询后果.假如查询后果是一个单值,后果类可以是任何JDO支持的类(Integer, Double, String, BigInteger, BigDecimal, java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp).Query中设置后果类的办法是:
void setResultClass(Class resultClass)
假如查询后果包含多个后果表达式,你可以定义一个后果类来保存后果中的各项数据,这个类必须有一个无参数的构造器.此外,每个后果表达式必须对应此类中的一个属性,不管是一个public的字段,还是一个public的setXxx()办法,并且这种直接的或bean气势的属性名称与查询后果中各项后果表达式的名称保持一致.
以上是“JDO 2.0查询语言的特点及功效[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |