<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    新的起點(diǎn) 新的開(kāi)始

    快樂(lè)生活 !

    翻譯DB4O參考——Query(四)

    NQ

    你不想使用你使用的編程語(yǔ)言來(lái)構(gòu)造查詢條件?它是100%類(lèi)型安全并且100%編譯時(shí)檢查和100%可分解.不想通過(guò)面向?qū)ο蟮?br />原則來(lái)實(shí)現(xiàn)查詢? 來(lái)吧!進(jìn)入NQ
    NQ是主要的查詢接口,它被推薦使用在你的應(yīng)用中查詢數(shù)據(jù)庫(kù),因?yàn)樗捎媚闶褂玫木幊陶Z(yǔ)言的語(yǔ)法,它是完美的標(biāo)準(zhǔn),對(duì)于
    將來(lái)也是安全的選擇.
    NQ支持所有平臺(tái).

    觀念

    NQ的感念來(lái)自下面的兩篇文章:
    Cook/Rosenberger, Native Queries for Persistent Objects, A Design White Paper
    Cook/Rai, Safe Query Objects: Statically Typed Objects as Remotely Executable Queries

    原則

    NQ通過(guò)運(yùn)行一行或者多行代碼而不是一個(gè)對(duì)象的所有實(shí)例.NQ表達(dá)式返回真,標(biāo)記指定的實(shí)例作為查詢的結(jié)果集的一部分,
    db4o試圖優(yōu)化NQ表達(dá)式,通過(guò)索引而不是真實(shí)的實(shí)例.
    簡(jiǎn)單的例子:
    讓我們看看采用db4o所支持的編程語(yǔ)言,用NQ是多么的簡(jiǎn)單.

    Java5:

    PrimitiveExample.java: primitiveQuery
    public static void primitiveQuery(ObjectContainer db)...{
    ??? List pilots = db.query(new Predicate() ...{
    ??????? public boolean match(Pilot pilot) ...{
    ??????????? return pilot.getPoints() == 100;
    ??????? }
    ??? });
    ? }
    Java1.2-1.4:

    NQExample.java: primitiveQuery
    public static void primitiveQuery(ObjectContainer db)...{
    ????? List <Pilot> pilots = db.query(new Predicate<Pilot>() ...{
    ????????? public boolean match(Pilot pilot) ...{
    ????????????? return pilot.getPoints() == 100;
    ????????? }
    ????? });?
    ??? }

    Java1.1:

    PrimitiveExample.java: primitiveQuery1
    public static void primitiveQuery1(ObjectContainer db)...{
    ??? List pilots = db.query(new PilotHundredPoints());
    ? }
    PilotHundredPoints.java
    /**//* Copyright (C) 2004 - 2006 db4objects Inc.
    http://www.db4o.com */
    import com.db4o.query.Predicate;

    public class PilotHundredPoints extends Predicate ...{
    ??? public boolean match(Pilot pilot) ...{
    ??????? return pilot.getPoints() == 100;
    ??? }
    }

    順便提醒一下上邊的語(yǔ)法:
    對(duì)于所有的方言不支持通用類(lèi)型,NQ按照習(xí)慣工作.一個(gè)繼承Predicate類(lèi)的對(duì)象有一個(gè)返回布爾值方法match()或者M(jìn)atch()
    這個(gè)方法有一個(gè)參數(shù).
    Java: boolean match(Pilot candidate);
    當(dāng)你使用NQ時(shí),別忘記用先進(jìn)IDE來(lái)輸入NQ表達(dá)式.如果你使用了模板和自動(dòng)完成功能.
    下面是如何在Eclipse3.1中配置:
    1.打開(kāi)菜單,選擇 Window + Preferences + Java + Editor + Templates + New
    名字為np,確保選擇java在context中,拷貝下面內(nèi)容到Pattern field中:
    List <${extent}> list = db.query(new Predicate <${extent}> () {
    public boolean match(${extent} candidate){
    return true;
    }
    });
    現(xiàn)在,你可以創(chuàng)建NQ查詢通過(guò)n + q + Control-Space
    這些簡(jiǎn)單的功能在許多先進(jìn)的IDE是有效的.

    深入的例子


    對(duì)于復(fù)雜的查詢,NQ語(yǔ)法是非常準(zhǔn)確并且便于很快的書(shū)寫(xiě).讓我們比較SODA查詢給定名字或者給定成績(jī)區(qū)間的pilot.
    存儲(chǔ):
    NQExample.java: storePilots
    public static void storePilots(ObjectContainer db) ...{
    ?????? db.set(new Pilot("Michael Schumacher",100));
    ?????? db.set(new Pilot("Rubens Barrichello",99));
    ??? }
    通過(guò)SODA查詢:
    NQExample.java: retrieveComplexSODA
    public static void retrieveComplexSODA(ObjectContainer db) ...{
    ??????? Query query=db.query();
    ??????? query.constrain(Pilot.class);
    ??????? Query pointQuery=query.descend("points");
    ??????? query.descend("name").constrain("Rubens Barrichello")
    ????????? .or(pointQuery.constrain(new Integer(99)).greater()
    ????????????? .and(pointQuery.constrain(new Integer(199)).smaller()));
    ??????? ObjectSet result=query.execute();
    ??????? listResult(result);
    ??? }
    下面是通過(guò)NQ語(yǔ)法實(shí)現(xiàn)相同的查詢.它是跟容易自動(dòng)完成可分解等其他IDE特性,并且還是運(yùn)行期檢查.
    NQExample.java: advancedQuery
    public static void advancedQuery(ObjectContainer db)...{
    ????? List <Pilot> result = db.query(new Predicate<Pilot>() ...{
    ????????? public boolean match(Pilot pilot) ...{
    ????????????? return pilot.getPoints() > 99
    ????????????????? && pilot.getPoints() < 199
    ???????????????? || pilot.getName().equals("Rubens Barrichello");
    ???????? }
    ????? });?
    ?? }

    隨意的查詢 .

    基本而言,你可以有效地使用NQ,原則上,你可以運(yùn)行使用NQ任意隨意的查詢,你僅僅要考慮其他的影響,特別是
    可能影響持久化的對(duì)象.
    讓我們運(yùn)行一個(gè)例子來(lái)包括更多的有效語(yǔ)言特性:
    NQExample.java: retrieveArbitraryCodeNQ
    public static void retrieveArbitraryCodeNQ(ObjectContainer db) ...{
    ????? final int[] points=...{1,100};
    ??????? ObjectSet result=db.query(new Predicate<Pilot>() ...{
    ????????? public boolean match(Pilot pilot) ...{
    ??????????? for(int i=0;i<points.length;i++) ...{
    ????????????? if(pilot.getPoints()==points[i]) ...{
    ??????????????? return true;
    ????????????? }
    ??????????? }
    ??????????? return pilot.getName().startsWith("Rubens");
    ????? }
    ??????? });
    ??????? listResult(result);
    ??? }

    NQ 性能

    對(duì)于NQ的一個(gè)缺點(diǎn)必須要指出:NO引擎試圖分析NQ表達(dá)式,并把它們轉(zhuǎn)化為SODA,這對(duì)于所有的查詢時(shí)不可能的.對(duì)于某些
    查詢,這種分析將是非常困難,如何這樣,db4o將不得不實(shí)例化一些持久對(duì)象來(lái)執(zhí)行NQ代碼.db4o將試圖分析部分NQ表達(dá)式
    來(lái)保證對(duì)象實(shí)例盡量的少.
    db4o社區(qū)有對(duì)NQ優(yōu)化團(tuán)隊(duì),你可以把你的結(jié)果和反饋給db4o組織。當(dāng)前優(yōu)化細(xì)節(jié)在NQ Optimization 章節(jié)。
    對(duì)于當(dāng)前的實(shí)現(xiàn),上面除了隨意的查詢外,其他的都進(jìn)行了優(yōu)化。

    posted on 2007-03-13 15:52 advincenting 閱讀(523) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 數(shù)據(jù)庫(kù)相關(guān)

    公告

    Locations of visitors to this pageBlogJava
  • 首頁(yè)
  • 新隨筆
  • 聯(lián)系
  • 聚合
  • 管理
  • <2007年3月>
    25262728123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統(tǒng)計(jì)

    常用鏈接

    留言簿(13)

    隨筆分類(lèi)(71)

    隨筆檔案(179)

    文章檔案(13)

    新聞分類(lèi)

    IT人的英語(yǔ)學(xué)習(xí)網(wǎng)站

    JAVA站點(diǎn)

    優(yōu)秀個(gè)人博客鏈接

    官網(wǎng)學(xué)習(xí)站點(diǎn)

    生活工作站點(diǎn)

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲处破女AV日韩精品| va天堂va亚洲va影视中文字幕| 免费无码又爽又刺激网站| 亚洲自偷自拍另类12p| 日韩免费视频网站| 99精品免费视频| 色噜噜亚洲男人的天堂| 国产亚洲美女精品久久久| 免费v片在线观看视频网站| 国产亚洲精品美女2020久久| 亚洲国产日韩一区高清在线| 破了亲妺妺的处免费视频国产| 伊人久久大香线蕉免费视频| 久久亚洲最大成人网4438| 中文字幕久久亚洲一区| 亚洲国产V高清在线观看| 99视频在线精品免费| 国产偷国产偷亚洲清高APP| 久久久久亚洲精品影视| 免费国内精品久久久久影院| 亚洲大片免费观看| 国产精品午夜免费观看网站| 亚洲乱亚洲乱妇24p| 精品无码一区二区三区亚洲桃色 | 免费亚洲视频在线观看| 亚洲ⅴ国产v天堂a无码二区| 四虎影在线永久免费观看| 13一14周岁毛片免费| 国产一区二区三区免费观在线| 亚洲午夜精品久久久久久app| 亚洲va在线va天堂va四虎| 亚洲第一页综合图片自拍| 一个人免费高清在线观看| 无码A级毛片免费视频内谢| sss日本免费完整版在线观看| 亚洲中文字幕乱码AV波多JI| 666精品国产精品亚洲| 国产亚洲一区二区三区在线观看 | 成年人网站在线免费观看| 老汉精品免费AV在线播放| 最新国产乱人伦偷精品免费网站|