<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
    主站蜘蛛池模板: 三级黄色片免费看| 国产亚洲美女精品久久久2020| 一级做a爱片特黄在线观看免费看| 亚洲精品国产手机| 亚洲区小说区激情区图片区| 国产精品无码免费视频二三区| 99久久免费观看| GOGOGO免费观看国语| 豆国产96在线|亚洲| 亚洲午夜在线播放| 337p欧洲亚洲大胆艺术| 亚洲人成中文字幕在线观看| 亚洲 自拍 另类小说综合图区| 性盈盈影院免费视频观看在线一区| 99视频在线免费| 日本免费久久久久久久网站| 国产免费伦精品一区二区三区 | 男人进去女人爽免费视频国产| 美女被暴羞羞免费视频| 国产AV旡码专区亚洲AV苍井空| 亚洲欧洲尹人香蕉综合| 亚洲一区二区影院| 亚洲国产综合专区电影在线| 久久精品国产亚洲麻豆| 亚洲国产精品无码成人片久久| 国产亚洲精品无码专区| 中文字幕亚洲乱码熟女一区二区 | 4338×亚洲全国最大色成网站| 国产免费私拍一区二区三区| 青青草国产免费久久久下载| 国内大片在线免费看| 暖暖免费高清日本一区二区三区| 男人的好免费观看在线视频| 久久精品免费一区二区喷潮 | 亚洲av丰满熟妇在线播放| 亚洲Av永久无码精品三区在线 | 亚洲日韩精品国产一区二区三区| 精品亚洲AV无码一区二区| 久久久国产亚洲精品| 亚洲日韩乱码中文字幕| 亚洲6080yy久久无码产自国产 |