婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > JDO 2.0查詢語言的特點(diǎn)

JDO 2.0查詢語言的特點(diǎn)

熱門標(biāo)簽:黃石智能營銷電銷機(jī)器人效果 淮南騰訊地圖標(biāo)注 商丘百應(yīng)電話機(jī)器人有沒有效果 開封便宜外呼系統(tǒng)報(bào)價(jià) 怎樣把地圖標(biāo)注出來 騰訊地圖標(biāo)注商戶改名注冊入駐 漯河辦理400電話 地圖標(biāo)注人員兼職 電話機(jī)器人的特色和創(chuàng)新

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

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

  查詢結(jié)果

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

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

  數(shù)據(jù)類(PersistentCapable)的一個(gè)或多個(gè)字段
  候選類以外的其它類對象

  統(tǒng)計(jì)數(shù)據(jù)

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

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

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

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

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

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

  void javax.jdo.Query.setResult(String result)

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

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

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

  result_expression as name
  
  名稱的使用可以讓結(jié)果中的該項(xiàng)作為結(jié)果類中的一個(gè)屬性來進(jìn)行設(shè)置和使用。你可以指定一個(gè)結(jié)果類(result class),用來返回查詢結(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é)果類的方法是:

  void setResultClass(Class resultClass)


  如果查詢結(jié)果包含多個(gè)結(jié)果表達(dá)式,你可以定義一個(gè)結(jié)果類來保留結(jié)果中的各項(xiàng)數(shù)據(jù),這個(gè)類必須有一個(gè)無參數(shù)的構(gòu)造器。此外,每個(gè)結(jié)果表達(dá)式必須對應(yīng)此類中的一個(gè)屬性,不論是一個(gè)public的字段,還是一個(gè)public的setXxx()方法,并且這種直接的或bean風(fēng)格的屬性名稱與查詢結(jié)果中各項(xiàng)結(jié)果表達(dá)式的名稱保持一致。

    組操作(Grouping)

  統(tǒng)計(jì)功能可用于一個(gè)分組操作中。JDO2.0提供類似SQL中的GROUP BY和HAVING子句。Query方法:


  void setGrouping(String groupSpec)


  用于指定分組的原則。groupSpec參數(shù)包含一個(gè)或多個(gè)以逗號分隔的分組表達(dá)式,還可以跟上一個(gè)以“having ”開頭的過濾條件。調(diào)用此方法后,setResult()參數(shù)的每個(gè)結(jié)果表達(dá)式項(xiàng)必須是groupSpec中的一項(xiàng),或者是groupSpec中的一項(xiàng)或多項(xiàng)的運(yùn)算結(jié)果。所有g(shù)roupSpec項(xiàng)的值均相同的結(jié)果被歸在同一組中(同一條結(jié)果記錄)。having子句的過濾條件可以包含boolean結(jié)果的判斷語句或者是對分組表達(dá)式的統(tǒng)計(jì)運(yùn)算。與SQL一樣,having子句用于對分組后的結(jié)果集進(jìn)行條件過濾。

  唯一性(Uniqueness)

  很多人一直奇怪為什么Query的執(zhí)行(execute)結(jié)果是一個(gè)Object類型的對象,因?yàn)檫@樣給開發(fā)人員造成必須手工強(qiáng)制將結(jié)果轉(zhuǎn)換成Collection的不便。JDO1.0中查詢結(jié)果一般有多個(gè)元素,但JDO專家組計(jì)劃在JDO2.0中加入對返回單值結(jié)果的查詢的支持,于是將Query的執(zhí)行結(jié)果定義為Object類型。

  你有時(shí)會(huì)執(zhí)行一個(gè)你確定結(jié)果只會(huì)有一條的查詢(比如統(tǒng)計(jì)總數(shù)或者按具有唯一索引的會(huì)員帳號查找對象等等),在JDO2.0中,你可以調(diào)用Query方法來聲明:


  void setUnique(boolean unique)


  當(dāng)你傳入“true”后,Query執(zhí)行的結(jié)果將是一個(gè)單獨(dú)的值對象,如果無任何結(jié)果返回,則結(jié)果是null。如果JDO發(fā)現(xiàn)查詢結(jié)果返回了多條記錄,則會(huì)扔出一個(gè)異常。

  限制返回結(jié)果的大小

  設(shè)計(jì)用戶界面的時(shí)候,我們常常會(huì)顯示結(jié)果集的某一部分子集(比如分頁顯示或只顯示前十條之類)。為了性能和效率,你多半會(huì)需要限制返回結(jié)果的范圍。Query的方法可以完成這一點(diǎn):


  void setRange(int fromInclusive, int toExclusive)


  該方法返回的結(jié)果集只包含原結(jié)果集的第fromInclusive條到第toExclusive-1條。

  新的過濾條件操作符

  一些新的操作符被加到JDOQL中,以便執(zhí)行針對引用、Map、字符串和數(shù)字的操作。instanceof操作符返回一個(gè)boolean值,可以讓你過濾某個(gè)指定類的對象;同樣返回boolean值的containsKey(Object)函數(shù)和containsValue(Object)用于訪問Map元素。

  字符串處理方面加入了很多函數(shù),toLowerCase()和toUpperCase()分別完成大小寫轉(zhuǎn)換,另外還有下列函數(shù)用于查找子串位置和獲得子串:


  int indexOf(String)
  int indexOf(String, int) String substring(int) String substring(int,int)


  另外,String的方法:


  boolean matches(String pattern)


  用于執(zhí)行正則式匹配。目前只能提供有限的匹配功能。“.”和“.*”可表示通配符,而“(?i)”表示匹配不區(qū)分大小寫。

  對數(shù)字型的字段,JDO2.0增加了兩個(gè)函數(shù):


  Math.abs(numeric) Math.sqrt(numeric)


  預(yù)定義查詢(Named Queries)

  你可以在JDO描述符(metadata)中聲明常用的JDOQL查詢語句,這樣就不用將查詢嵌入到Java源代碼中。這樣可以提供一些靈活性,比如將查詢語句寫到一個(gè)配置好的文本文件中,而需要修改時(shí)可以直接改該文件,而不用更改Java源碼。描述符中的每個(gè)查詢都有一個(gè)名字,而要執(zhí)行某個(gè)查詢時(shí),可以使用下面的方法來創(chuàng)建查詢:

  Query newNamedQuery(Class cls, String queryName)

  JDO將會(huì)搜索描述符來找到對應(yīng)的預(yù)定義查詢語句并生成相應(yīng)的Query對象。

  訪問靜態(tài)字段(static fields)

  你將可以在JDOQL中訪問數(shù)據(jù)類中以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”的過濾條件。

  批量刪除(Deletion by Query)

  在JDO1.0中,要?jiǎng)h除一個(gè)對象,必須先將其載入內(nèi)存,再刪除,然而很多情況下,你在刪除之前并不需要訪問該對象,這樣的做法比較低效。在JDO2.0中,提供了Query的幾個(gè)方法來刪除符合查詢條件的一組對象:

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

  此查詢結(jié)果的對象會(huì)被全部從數(shù)據(jù)庫刪除。這些方法返回被刪除對象的集合。你的程序可以決定是否需要對被刪除的對象逐個(gè)訪問。如果你不訪問這些對象,Query執(zhí)行的性能將不會(huì)受到任何影響,換句話說,這些對象將不會(huì)在內(nèi)存中生成。
  
  廠商擴(kuò)展的查詢特性

  JDO廠商可以給JDOQL提供各種各樣的特殊查詢功能。每個(gè)廠商可以定義一組屬于該廠商自己的擴(kuò)展功能。如果你需要使用其中的功能,你需要將該廠商的擴(kuò)展加到程序運(yùn)行環(huán)境中。每個(gè)擴(kuò)展有一個(gè)名字和一個(gè)可選的值。你可以單獨(dú)設(shè)置每個(gè)擴(kuò)展,或者一次性設(shè)置多個(gè)擴(kuò)展。Query的下列方法用于設(shè)置廠商擴(kuò)展特性:

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

  SQL直接訪問

  如果JDO2.0的查詢功能不能滿足需要,并且以下條件都滿足:

  你的應(yīng)用運(yùn)行在關(guān)系數(shù)據(jù)庫上
  
  你需要的查詢有SQL語句可以實(shí)現(xiàn)

  你知道從你的類模型到數(shù)據(jù)庫的映射細(xì)節(jié)

  你就可以創(chuàng)建一個(gè)SQL查詢,方法是調(diào)用PersistentManger的方法:

  Query newQuery(String language, Object query)
  
  每一個(gè)參數(shù)需要設(shè)置為“javax.jdo.query.SQL”,而query是一個(gè)具體的SQL語句。如果你的查詢需要返回類的實(shí)例,則這個(gè)SQL語句必須返回該類的相應(yīng)主鍵字段。使用直接的SQL時(shí),JDOQL提供的函數(shù)將不能被使用,否則將會(huì)扔出異常JDOUserException,比如,你不能對該Query設(shè)置過濾條件字符串、排序聲明或變量聲明。使用SQL查詢時(shí),參數(shù)都是未指定類型的,在SQL語句中以“?”表示,并且按出現(xiàn)的順序被綁定。

  結(jié)束語

  各位讀者已經(jīng)看到,JDO2.0對查詢語句增加了很多新的功能和特性,我認(rèn)為其中的查詢結(jié)果定義是最大的改進(jìn)。正如我在文章開頭說的,這一部分變化目前來說是JDO2.0中最穩(wěn)定的部分,不會(huì)有大的變化。廠商可以開始提供很多這樣的功能,不用考慮專家組還在討論的JDO2.0其余部分將如何變化。

  在JDO2.0提供標(biāo)準(zhǔn)的對象/關(guān)系映射的前提下,這里描述的查詢功能和一個(gè)用于多層結(jié)構(gòu)的JDO應(yīng)用的脫鉤/掛鉤(detach/attach)機(jī)制,將使JDO占領(lǐng)更多的市場。對這一點(diǎn)有深切體會(huì)的廠商將不遺余力地爭取率先推出穩(wěn)定、完整、高效的JDO2.0產(chǎn)品。JDO將是基于數(shù)據(jù)庫存儲和管理的應(yīng)用開發(fā)的首先API,開發(fā)人員們將享受面向?qū)ο蟮哪P驮O(shè)計(jì)和高效的數(shù)據(jù)存儲管理系統(tǒng)。

標(biāo)簽:武威 紅河 大興安嶺 亳州 鄭州 拉薩 岳陽 馬鞍山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《JDO 2.0查詢語言的特點(diǎn)》,本文關(guān)鍵詞  JDO,2.0,查詢,語言,的,特點(diǎn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《JDO 2.0查詢語言的特點(diǎn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于JDO 2.0查詢語言的特點(diǎn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久婷婷成人综合色| 99精品欧美一区二区蜜桃免费 | 久久综合九色综合久久久精品综合| 欧美日韩高清影院| 日韩一区二区三区在线视频| 日韩欧美国产小视频| 久久久久99精品国产片| 国产视频一区二区三区在线观看| 国产日韩欧美在线一区| 国产精品少妇自拍| 午夜精品在线看| 极品瑜伽女神91| 99re成人在线| 欧美一区二区三区视频在线| 久久亚洲精品小早川怜子| 国产精品国产三级国产有无不卡 | 成人免费视频视频在线观看免费| 91无套直看片红桃| 2023国产精华国产精品| 伊人色综合久久天天人手人婷| 舔着乳尖日韩一区| 色偷偷久久一区二区三区| 欧美成人国产一区二区| 亚洲精品福利视频网站| 国产呦精品一区二区三区网站| 91视频在线观看免费| www日韩大片| 麻豆国产精品一区二区三区| 一本久道久久综合中文字幕| 久久精品视频免费观看| 久久不见久久见免费视频7| 欧美日韩国产区一| 亚洲综合小说图片| 91老师国产黑色丝袜在线| 中文字幕精品三区| 国产成人欧美日韩在线电影| 欧美一区二区三区视频在线| 亚洲麻豆国产自偷在线| 99久久久久免费精品国产 | 91麻豆国产自产在线观看| 日韩精品影音先锋| 国产尤物一区二区| 欧美精品一区二区在线播放| 青青草一区二区三区| 国产精品无码永久免费888| 奇米色777欧美一区二区| 欧美日韩国产一级片| 一区二区三区在线免费观看| 在线精品视频小说1| 亚洲精品久久久久久国产精华液| 成人app在线观看| 亚洲免费av在线| 91精品在线免费| 男人的天堂亚洲一区| 久久这里都是精品| aaa国产一区| 亚洲激情校园春色| 91精品国产欧美一区二区| 国产成人高清在线| 亚洲电影第三页| 久久久久久久一区| 色综合咪咪久久| 韩日欧美一区二区三区| 亚洲一区二区三区免费视频| 久久久99久久| 精品久久久三级丝袜| 成人动漫一区二区在线| 青娱乐精品视频| 中文字幕亚洲视频| ww亚洲ww在线观看国产| 91精品国产综合久久福利软件| 99久久精品免费| 成人黄色免费短视频| 国产一二精品视频| 日韩黄色免费电影| 亚洲免费观看视频| 久久精品亚洲一区二区三区浴池| 色婷婷久久99综合精品jk白丝| 国产一区二区三区在线观看免费视频 | 亚洲精品成a人| 亚洲日本乱码在线观看| 亚洲色图第一区| 亚洲精品第1页| 亚洲成人www| 日韩国产一二三区| 亚洲主播在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 国产成人高清视频| 国产精品综合一区二区| 99在线精品一区二区三区| 成人黄色av网站在线| 色综合天天综合狠狠| 欧美性受xxxx| 精品福利二区三区| 国产精品久久久久久久久免费樱桃 | 天天综合网天天综合色| 蜜桃av一区二区三区| 久久99精品久久只有精品| 日韩一区二区三区免费看 | 欧美高清精品3d| 精品国产1区2区3区| 亚洲视频小说图片| 七七婷婷婷婷精品国产| 国产.欧美.日韩| 欧美综合一区二区| 久久女同精品一区二区| 亚洲va国产天堂va久久en| 成人精品电影在线观看| 欧美一区二区在线不卡| 国产精品免费aⅴ片在线观看| 日本午夜一区二区| 99久久99久久精品国产片果冻| 欧美精品xxxxbbbb| 亚洲一区av在线| 国产91丝袜在线18| 精品久久国产字幕高潮| 日韩电影免费在线观看网站| 99精品欧美一区二区三区小说| 精品国产一区二区亚洲人成毛片| 亚洲激情在线播放| 91丨九色丨蝌蚪丨老版| 国产日韩精品一区| 国产精品1024久久| 国产人成亚洲第一网站在线播放| 蜜桃一区二区三区在线观看| 在线亚洲免费视频| 五月婷婷激情综合网| 欧美影视一区二区三区| 亚洲日韩欧美一区二区在线| 91在线一区二区三区| 亚洲精品亚洲人成人网 | 麻豆精品精品国产自在97香蕉| 日韩一区二区三区在线| 韩国中文字幕2020精品| 91精品国产色综合久久不卡蜜臀| 亚洲一区二区三区视频在线播放| 91一区在线观看| 午夜精品久久久久久久久久| 欧美一级高清片| 丰满岳乱妇一区二区三区| 国产精品蜜臀av| 欧美视频一区二区三区在线观看 | 欧美视频一区在线观看| 亚洲国产精品一区二区尤物区| 欧美一区二区三区视频在线| 麻豆成人在线观看| 亚洲人成精品久久久久久| 欧美精品自拍偷拍动漫精品| 九九国产精品视频| 一区二区三区影院| 国产欧美中文在线| 欧洲视频一区二区| 国产综合色在线| 奇米色一区二区三区四区| 国产精品灌醉下药二区| 日韩美女视频在线| 日本高清成人免费播放| 国产黄色91视频| 免费高清成人在线| 丝袜美腿亚洲色图| 亚洲精品乱码久久久久久久久| 91精品国模一区二区三区| 在线亚洲高清视频| 92精品国产成人观看免费| 国产麻豆视频一区| 国产在线视视频有精品| 免费在线看一区| 免费不卡在线观看| 成人免费高清在线| 国产福利一区二区三区视频在线| 香蕉影视欧美成人| 日日摸夜夜添夜夜添亚洲女人| 亚洲视频香蕉人妖| 一区二区三区四区不卡在线| 一区免费观看视频| 亚洲精品中文字幕乱码三区| 亚洲欧美激情视频在线观看一区二区三区 | www亚洲一区| 久久一区二区视频| 国产日产欧产精品推荐色| 国产三区在线成人av| 国产日韩亚洲欧美综合| 国产精品福利一区二区| 亚洲国产综合91精品麻豆| 亚洲国产精品欧美一二99| 香蕉乱码成人久久天堂爱免费| 日韩精品每日更新| 国产麻豆精品在线观看| 成人精品免费网站| 制服丝袜成人动漫| 国产精品网站导航| 日日夜夜免费精品视频| 国产精品456| 欧美乱妇一区二区三区不卡视频| 精品国产一区二区三区久久影院| 国产精品美女久久久久久2018| 亚洲国产精品久久人人爱蜜臀| 精品亚洲成a人在线观看| 色欧美日韩亚洲| 久久综合丝袜日本网|