|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践!
查询言语的改善是JDO2.0标准中的主要环节,本文从较高的层面论述JDO2.0所供应的一些新功效。因为JDO2.0标准还未进进公然草案形态,今朝还没有任何内容敲定上去,统统都还大概面对变更。不外,JDO2.0将会很快进进最初阶段,而这里提到的查询特征是JDO2.0专家组(译者注:DavidJordan就是专家组主要成员)消费工夫最多,而且绝对来讲最为不乱。因而,我有充足来由信任,终极标准与这里的形貌将会基础分歧。
假如列位读者以为本文漏掉了某些主要的特征,倡议当即到JDO论坛(http://www.jdocentral.com/forums/index.php?showforum=10)往提出并会商。这里我们必要感激JDO2.0标准向导人CraigRussell受权给我公然这些JDO2.0查询言语的新特征。
查询了局
我们起首从最深切的改善入手下手先容。在JDO1.0中,查询了局老是你所指定的类的实例汇合。思索上面的UML类图,它表达了A、B、C、D四个类及之间的干系:
<br>
你能够创立一个对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之类的统计了局。基础上,你想前往甚么了局都能够。
当你创立一个查询时,你能够指定一个“了局界说(ResultSpecification)”来指定前往甚么样的内容。它是一个包括一个或多个以逗号分开的“了局表达式(ResultExpression)”。了局表达式能够是:
this关头字,暗示前往候选类的对象实例。这与JDO1.0是一样的字段,标明候选类或援用类的某个字段的值,如address.street.name字段表达式,代表对多个字段举行JDO预界说的几种算术运算而取得的了局变量,代表查询前提中呈现的某其中间变量援用表达式,也就是JDO1.0中的经由过程“.”操纵符举行的对象之间的援用统计表达式经由过程对以上这几种了局表达式的组合使用,你能够取得任何你想要的了局。
JDO2.0撑持上面的统计函数:
count(表达式),表达式能够是this
sum(数字型字段表达式),“数字型字段表达式”能够是经由过程字段或字段的运算失掉的数字型的了局
min(数字型字段表达式)
max(数字型字段表达式)
avg(数字型字段表达式)
对查询了局的指定是经由过程上面的API:
voidjavax.jdo.Query.setResult(Stringresult)
假如你不挪用这个办法,大概参数是null,则前往候选类的对象实例(相称于设置为“this”),即JDO1.0的前往了局。假如你只指定了独一了局表达式,则前往汇合的元素范例与该了局的范例分歧。别的,在默许体例下,假如指定了多个了局表达式,则前往的汇合元素范例将是Object[]。
你能够在了局界说字符串的开首标上distinct来包管了局不会反复。而假如了局界说串中包括好几个表达式,那末distinct能够包管了局会合不会有反复的数据组。
每一个了局表达式能够指定一个称号,关于复杂的字段,体系会默许以该字段的称号作为了局中该项的称号。对庞大的表达式,你可使用上面的语法指命名称:
result_expressionasname
称号的利用可让了局中的该项作为了局类中的一个属性来举行设置和利用。你能够指定一个了局类(resultclass),用来前往查询了局。假如查询了局是一个单值,了局类能够是任何JDO撑持的类(Integer,Double,String,BigInteger,BigDecimal,java.util.Date,java.sql.Date,java.sql.Time,java.sql.Timestamp)。Query中设置了局类的办法是:
voidsetResultClass(ClassresultClass)
假如查询了局包括多个了局表达式,你能够界说一个了局类来保存了局中的各项数据,这个类必需有一个无参数的机关器。别的,每一个了局表达式必需对应此类中的一个属性,不管是一个public的字段,仍是一个public的setXxx()办法,而且这类间接的或bean作风的属性称号与查询了局中各项了局表达式的称号坚持分歧。
<p>
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。 |
|