国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

感受JDO 2.0查詢語(yǔ)言的特點(diǎn)

2019-11-18 15:40:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  查詢語(yǔ)言的改進(jìn)是JDO2.0規(guī)范中的重要環(huán)節(jié),本文從較高的層面闡述JDO2.0所提供的一些新功能。由于JDO2.0規(guī)范還未進(jìn)入公開(kāi)草案狀態(tài),目前還沒(méi)有任何內(nèi)容敲定下來(lái),一切都還可能面臨變化。
不過(guò),JDO2.0將會(huì)很快進(jìn)入最后階段,而這里提到的查詢特性是JDO2.0專家組(譯者注:David Jordan就是專家組重要成員)花費(fèi)時(shí)間最多,并且相對(duì)來(lái)說(shuō)最為穩(wěn)定。因此,我有足夠理由相信,最終規(guī)范與這里的描述將會(huì)基本一致。

  假如各位讀者覺(jué)得本文遺漏了某些重要的特性,建議立即到JDO論壇(http://www.jdocentral.com/forums/index.php?showforum=10)去提出并討論。這里我們需要感謝JDO2.0規(guī)范領(lǐng)導(dǎo)人Craig Russell授權(quán)給我公開(kāi)這些JDO2.0查詢語(yǔ)言的新特性。

  查詢結(jié)果

  我們首先從最深入的改進(jìn)開(kāi)始介紹。在JDO1.0中,查詢結(jié)果總是你所指定的類的實(shí)例集合。考慮下面的UML類圖,它表達(dá)了A、B、C、D四個(gè)類及之間的關(guān)系:

感受JDO 2.0查詢語(yǔ)言的特點(diǎn)(圖一)

  你可以創(chuàng)建一個(gè)對(duì)A類的查詢,通過(guò)contains()引用到B類,再通過(guò)又一層contains()引用到C類,最后再使用一個(gè)“.”操作符引用到D類。但最終返回的集合中只會(huì)包含A類的對(duì)象實(shí)例,假如要從結(jié)果中獲得其它類,就必須通過(guò)A類的引用來(lái)逐個(gè)獲取相關(guān)的其它類對(duì)象。假如你的查詢條件里面包含了B、C或D類的約束,那么在結(jié)果集中通過(guò)A類對(duì)象引用其它類對(duì)象時(shí),必須重新將這些約束在java代碼中重復(fù)一遍,也就是說(shuō),你不得不在Java和JDOQL中重復(fù)聲明限制條件。再者,你可能只關(guān)心滿足查詢條件的D類對(duì)象,而不希望中間的B、C類對(duì)象被JDO底層創(chuàng)建從而節(jié)省內(nèi)存或相關(guān)資源。

  在JDO2.0中,你再也不受縛于這些限制了。你可以返回:

  數(shù)據(jù)類(PersistentCapable)的一個(gè)或多個(gè)字段
  候選類以外的其它類對(duì)象
  統(tǒng)計(jì)數(shù)據(jù)

  這意味著你可以返回A、B、C、D類對(duì)象,或者它們的某些字段,或者二者的混和結(jié)果。你還可以計(jì)算類似min或max之類的統(tǒng)計(jì)結(jié)果。基本上,你想返回什么結(jié)果都可以。

  當(dāng)你創(chuàng)建一個(gè)查詢時(shí),你可以指定一個(gè)“結(jié)果定義(Result Specification)”來(lái)指定返回什么樣的內(nèi)容。它是一個(gè)包含一個(gè)或多個(gè)以逗號(hào)分隔的“結(jié)果表達(dá)式(Result EXPRession)”。結(jié)果表達(dá)式可以是:

  this要害字,表示返回候選類的對(duì)象實(shí)例。這與JDO1.0是一樣的字段,標(biāo)明候選類或引用類的某個(gè)字段的值,如 address.street.name 字段表達(dá)式,代表對(duì)多個(gè)字段進(jìn)行JDO預(yù)定義的幾種算術(shù)運(yùn)算而獲得的結(jié)果變量,代表查詢條件中出現(xiàn)的某個(gè)中間變量引用表達(dá)式,也就是JDO1.0中的通過(guò)“.”操作符進(jìn)行的對(duì)象之間的引用 統(tǒng)計(jì)表達(dá)式通過(guò)對(duì)以上這幾種結(jié)果表達(dá)式的組合運(yùn)用,你可以獲得任何你想要的結(jié)果。

  JDO2.0支持下面的統(tǒng)計(jì)函數(shù):

  count(表達(dá)式),表達(dá)式可以是this
  sum(數(shù)字型字段表達(dá)式),“數(shù)字型字段表達(dá)式”可以是通過(guò)字段或字段的運(yùn)算得到的數(shù)字型的結(jié)果
  min(數(shù)字型字段表達(dá)式)
  max(數(shù)字型字段表達(dá)式)
  avg(數(shù)字型字段表達(dá)式)

  對(duì)查詢結(jié)果的指定是通過(guò)下面的API:

void javax.jdo.Query.setResult(String result)
  假如你不調(diào)用這個(gè)方法,或者參數(shù)是null,則返回候選類的對(duì)象實(shí)例(相當(dāng)于設(shè)置為“this”),即JDO1.0的返回結(jié)果。假如你只指定了唯一結(jié)果表達(dá)式,則返回集合的元素類型與該結(jié)果的類型一致。另外,在默認(rèn)方式下,假如指定了多個(gè)結(jié)果表達(dá)式,則返回的集合元素類型將是 Object[]。

  你可以在結(jié)果定義字符串的開(kāi)頭標(biāo)上distinct來(lái)保證結(jié)果不會(huì)重復(fù)。而假如結(jié)果定義串中包含好幾個(gè)表達(dá)式,那么distinct可以保證結(jié)果集中不會(huì)有重復(fù)的數(shù)據(jù)組。

  每個(gè)結(jié)果表達(dá)式可以指定一個(gè)名稱,對(duì)于簡(jiǎn)單的字段,系統(tǒng)會(huì)默認(rèn)以該字段的名稱作為結(jié)果中該項(xiàng)的名稱。對(duì)復(fù)雜的表達(dá)式,你可以使用下面的語(yǔ)法指定名稱:

result_expression as name  
  名稱的使用可以讓結(jié)果中的該項(xiàng)作為結(jié)果類中的一個(gè)屬性來(lái)進(jìn)行設(shè)置和使用。你可以指定一個(gè)結(jié)果類(result class),用來(lái)返回查詢結(jié)果。假如查詢結(jié)果是一個(gè)單值,結(jié)果類可以是任何JDO支持的類(Integer, Double, String, BigInteger, BigDecimal, java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp)。Query中設(shè)置結(jié)果類的方法是:



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 衡水市| 灵璧县| 平安县| 安阳县| 蓬莱市| 博客| 锦州市| 澳门| 巴中市| 湖州市| 固安县| 丘北县| 潢川县| 汶川县| 潞城市| 福泉市| 舒兰市| 金阳县| 青浦区| 紫金县| 克拉玛依市| 襄汾县| 福鼎市| 米易县| 吉隆县| 新疆| 黔西县| 临洮县| 都兰县| 旅游| 紫云| 尼勒克县| 霍州市| 乌兰县| 奉节县| 潜山县| 泰顺县| 澜沧| 河间市| 宁河县| 淅川县|