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

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

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

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

    1、創建一個Criteria實例
    net.sf.hibernate.Criteria這個接口代表對一個特定的持久化類的查詢。Session是用來制造Criteria實例的工廠。 

    Criteria crit = sess.createCriteria(Cat.class);
    crit.setMaxResults(50);
    List cats = crit.list();

    返回最多50條記錄的結果集。

    2、縮小結果集范圍
    一個查詢條件(Criterion)是net.sf.hibernate.expression.Criterion接口的一個實例。類net.sf.hibernate.expression.Expression定義了獲得一些內置的Criterion類型。 

    List cats = sess.createCriteria(Cat.class)
        .add( Expression.like("name", "Fritz%") )
        .add( Expression.between("weight", minWeight, maxWeight) )
        .list();
    表達式(Expressions)可以按照邏輯分組. 

    List cats = sess.createCriteria(Cat.class)
        .add( Expression.like("name", "Fritz%") )
        .add( Expression.or(
         Expression.eq( "age", new Integer(0) ),
         Expression.isNull("age")
        ) )
        .list();

    返回(name like "Fritz%" and age 等于0 或者 age 為空)的結果集


    List cats = sess.createCriteria(Cat.class)
        .add( Expression.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
        .add( Expression.disjunction()
            .add( Expression.isNull("age") )
         .add( Expression.eq("age", new Integer(0) ) )
         .add( Expression.eq("age", new Integer(1) ) )
         .add( Expression.eq("age", new Integer(2) ) )
        ) )
        .list();

    Expression.disjunction()----意思是可以按照邏輯分組
    有很多預制的條件類型(Expression的子類)。有一個特別有用,可以讓你直接嵌入SQL。 

    List cats = sess.createCriteria(Cat.class)
        .add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING) )
        .list();
    其中的{alias}是一個占位符,它將會被所查詢實體的行別名所替代。(原文:The {alias} placeholder with be replaced by the row alias of the queried entity.) 

    3、對結果排序
    可以使用net.sf.hibernate.expression.Order對結果集排序. 

    List cats = sess.createCriteria(Cat.class)
        .add( Expression.like("name", "F%")
        .addOrder( Order.asc("name") )
        .addOrder( Order.desc("age") )
        .setMaxResults(50)
        .list();
    4、關聯(Associations)
    你可以在關聯之間使用createCriteria(),很容易地在存在關系的實體之間指定約束。 

    List cats = sess.createCriteria(Cat.class)
        .add( Expression.like("name", "F%")
        .createCriteria("kittens")
            .add( Expression.like("name", "F%")
        .list();
    注意,第二個createCriteria()返回一個Criteria的新實例,指向kittens集合類的元素。 

    下面的替代形式在特定情況下有用。 

    List cats = sess.createCriteria(Cat.class)
        .createAlias("kittens", "kt")
        .createAlias("mate", "mt")
        .add( Expression.eqProperty("kt.name", "mt.name") )
        .list();
    (createAlias())并不會創建一個Criteria的新實例。) 

    請注意,前面兩個查詢中Cat實例所持有的kittens集合類并沒有通過criteria預先過濾!如果你希望只返回滿足條件的kittens,你必須使用returnMaps()。 

    List cats = sess.createCriteria(Cat.class)
        .createCriteria("kittens", "kt")
            .add( Expression.eq("name", "F%") )
        .returnMaps()
        .list();
    Iterator iter = cats.iterator();
    while ( iter.hasNext() ) {
        Map map = (Map) iter.next();
        Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
        Cat kitten = (Cat) map.get("kt");
    }
    5、動態關聯對象獲?。―ynamic association fetching)
    可以在運行時通過setFetchMode()來改變關聯對象自動獲取的策略。 

    List cats = sess.createCriteria(Cat.class)
        .add( Expression.like("name", "Fritz%") )
        .setFetchMode("mate", FetchMode.EAGER)
        .list();
    這個查詢會通過外連接(outer join)同時獲得 mate和kittens。 

    6、根據示例查詢(Example queries)
    net.sf.hibernate.expression.Example類允許你從指定的實例創造查詢條件。 

    Cat cat = new Cat();
    cat.setSex('F');
    cat.setColor(Color.BLACK);
    List results = session.createCriteria(Cat.class)
        .add( Example.create(cat) )
        .list();
    版本屬性,表示符屬性和關聯都會被忽略。默認情況下,null值的屬性也被排除在外。 

    You can adjust how the Example is applied. 你可以調整示例(Example)如何應用。 

    Example example = Example.create(cat)
        .excludeZeroes()           //exclude zero valued properties
        .excludeProperty("color")  //exclude the property named "color"
        .ignoreCase()              //perform case insensitive string comparisons
        .enableLike();             //use like for string comparisons
    List results = session.createCriteria(Cat.class)
        .add(example)
        .list();
    你甚至可以用示例對關聯對象建立criteria。 

    List results = session.createCriteria(Cat.class)
        .add( Example.create(cat) )
        .createCriteria("mate")
            .add( Example.create( cat.getMate() ) )
        .list();

    posted on 2007-10-19 09:48 蘆葦 閱讀(660) 評論(0)  編輯  收藏 所屬分類: Hibernate
    主站蜘蛛池模板: 国产AV旡码专区亚洲AV苍井空| 少妇性饥渴无码A区免费 | 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲国产成人久久精品动漫 | 久久国产精品一区免费下载| 亚洲一区免费在线观看| 中文字幕无码免费久久99| 亚洲精品久久久www| 亚洲国产成人超福利久久精品| 亚洲精品无码人妻无码| 91成人免费观看在线观看| 四虎成人免费大片在线| 亚洲熟女一区二区三区| 亚洲精品无码人妻无码| 波多野结衣一区二区免费视频| 久久青草亚洲AV无码麻豆| 亚洲乱码中文字幕在线| 四虎国产精品免费视| 亚洲男人天堂2018av| 国产黄色片在线免费观看| 亚洲国产精品张柏芝在线观看| 一区免费在线观看| 欧美好看的免费电影在线观看| 久久亚洲精品无码AV红樱桃| 日日摸夜夜添夜夜免费视频| 久久亚洲高清综合| 男人j进女人p免费视频| 午夜毛片不卡免费观看视频| 污网站在线观看免费| 亚洲欧洲精品无码AV| 四虎1515hh永久久免费| 成a人片亚洲日本久久| 国产精品1024永久免费视频| 亚洲色欲色欲综合网站| 成年女人18级毛片毛片免费观看| 亚洲国产夜色在线观看| 又粗又黄又猛又爽大片免费| 中文字幕乱码一区二区免费| 亚洲免费福利视频| 久久久青草青青国产亚洲免观| 久久午夜羞羞影院免费观看 |