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

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

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

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

     

    Criteria 使用指南(轉(zhuǎn))

    經(jīng)常用到Criteria,所以做一下總結(jié)

     net.sf.hibernate.Criteria這個(gè)接口代表對(duì)一個(gè)特定的持久化類的查詢。Session是用來制造Criteria實(shí)例的工廠。

     

    Criteria對(duì)SQL進(jìn)行封裝,讓開發(fā)人員可以用物件的方式來對(duì)資料庫進(jìn)行操作,例如下面的查詢User表格中的所有資料:
    Criteria criteria = session.createCriteria(User.class);
    // 查詢user所有欄位
    List users = criteria.list();
    Iterator iterator =  users.iterator();
    System.out.println("id \t name/age");
    while(iterator.hasNext()) {
        User user = (User) iterator.next();
        System.out.println(user.getId() +
                                   " \t " + user.getName() +
                                   "/" + user.getAge());           
    }

    Hibernate實(shí)際上使用以下的SQL來查詢資料庫:
    select this_.id as id0_, this_.name as name0_0_, this_.age as age0_0_ from user this_

    Criteria實(shí)際上只是個(gè)容器,如果想要設(shè)定查詢條件,則要使用add()方法加入Restrictions的條件限制,例如查詢age大于20且小于40的資料:
    Criteria criteria = session.createCriteria(User.class);
    criteria.add(Restrictions.gt("age", new Integer(20)));
    criteria.add(Restrictions.lt("age", new Integer(40)));
    List users = criteria.list();

    您也可以使用邏輯組合來進(jìn)行查詢,例如結(jié)合age等于(eq)20或(or)age為空(isNull)的條件:
    Criteria criteria = session.createCriteria(User.class);
    criteria.add(Restrictions.or(
                       Restrictions.eq("age", new Integer(20)),
                       Restrictions.isNull("age")
                   ));
    List users = criteria.list();

    也可以使用sqlRestriction()方法來提供SQL語法作限定查詢,例如查詢name以cater開頭的資料:
    Criteria criteria = session.createCriteria(User.class);
    criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
    List users = criteria.list();

    其中alias將被替換為與User類別相關(guān)的名稱,而?將被替換為cater%,也就是第二個(gè)參數(shù)所提供的值,在SQL撰寫時(shí),不必再寫WHERE,如果有多個(gè)查詢條件,例如BETWEEN子句的查詢,則可以如下:
    Criteria criteria = session.createCriteria(User.class);
    Integer[] ages = {new Integer(20), new Integer(40)};
    Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};
    criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));
    List users = criteria.list();

    Restrictions的幾個(gè)常用限定查詢方法如下表所示:
    方法 說明
    Restrictions.eq 等于
    Restrictions.allEq 使用Map,使用key/value進(jìn)行多個(gè)等于的比對(duì)
    Restrictions.gt 大于 >
    Restrictions.ge 大于等于 >=
    Restrictions.lt 小于 <
    Restrictions.le 小于等于 <=
    Restrictions.between 對(duì)應(yīng)SQL的BETWEEN子句
    Restrictions.like 對(duì)應(yīng)SQL的LIKE子句
    Restrictions.in 對(duì)應(yīng)SQL的in子句
    Restrictions.and and關(guān)系
    Restrictions.or or關(guān)系
    Restrictions.sqlRestriction SQL限定查詢

    Criteria 高級(jí)特性

     限定返回的記錄范圍

     通過criteria. setFirstResult/setMaxResults 方法可以限制一次查詢返回的記錄范圍:

     Criteria criteria = session.createCriteria(User.class);

     //限定查詢返回檢索結(jié)果中,從第一百條結(jié)果開始的20條記錄

     criteria.setFirstResult(100);

     criteria.setMaxResults(20);

     對(duì)查詢結(jié)果進(jìn)行排序

     //查詢所有groupId=2的記錄

     //并分別按照姓名(順序)groupId(逆序)排序

     Criteria criteria = session.createCriteria(TUser.class);

     criteria.add(Expression.eq("groupId",new Integer(2)));

     criteria.addOrder(Order.asc("name"));

     criteria.addOrder(Order.desc("groupId"));

     




    進(jìn)行復(fù)合查詢示例:

     LogicalExpression subcriteria = Expression.or(Expression.ilike("name", searchtxt, MatchMode.ANYWHERE),
              Expression.ilike("description", searchtxt, MatchMode.ANYWHERE));
          criteria.add(subcriteria );


    參考:http://blog.csdn.net/abeetle/archive/2007/09/24/1798588.aspx

    posted on 2009-03-03 14:25 找個(gè)美女做老婆 閱讀(2357) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产免费av片在线看| 精品福利一区二区三区免费视频| 国产偷v国产偷v亚洲高清| 色偷偷女男人的天堂亚洲网| 久久精品人成免费| 亚洲综合激情六月婷婷在线观看| 亚洲小说区图片区| 国产成人精品免费视频大| 亚洲综合久久久久久中文字幕| 亚洲天堂2017无码中文| 欧美a级在线现免费观看| 亚洲国产电影在线观看| 一二三四在线播放免费观看中文版视频 | 狠狠亚洲婷婷综合色香五月排名| 亚洲av无码乱码国产精品| 国产羞羞的视频在线观看免费| 免费无码又黄又爽又刺激| 亚洲六月丁香六月婷婷蜜芽| 亚欧免费视频一区二区三区| 亚洲av无码国产综合专区| 日韩免费a级在线观看| 日韩在线观看免费| 亚洲精品国产精品乱码视色| 久久久精品免费视频| 亚洲天堂一区二区三区四区| 午夜神器成在线人成在线人免费 | 精品无码免费专区毛片| 国产成人亚洲精品| mm1313亚洲精品国产| 97超高清在线观看免费视频| 久久精品国产亚洲AV嫖农村妇女| 老司机午夜性生免费福利| 亚洲中文字幕在线乱码| 亚洲国产精品免费在线观看| 亚洲区日韩精品中文字幕| 国产自产拍精品视频免费看| a毛片免费在线观看| 亚洲人成网站色在线观看| 亚洲国产一区视频| 亚洲美女免费视频| 免费精品国自产拍在线播放|