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

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

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

    Java學習

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

     

    Criteria 使用指南(轉)

    經常用到Criteria,所以做一下總結

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

     

    Criteria對SQL進行封裝,讓開發人員可以用物件的方式來對資料庫進行操作,例如下面的查詢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實際上使用以下的SQL來查詢資料庫:
    select this_.id as id0_, this_.name as name0_0_, this_.age as age0_0_ from user this_

    Criteria實際上只是個容器,如果想要設定查詢條件,則要使用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();

    您也可以使用邏輯組合來進行查詢,例如結合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類別相關的名稱,而?將被替換為cater%,也就是第二個參數所提供的值,在SQL撰寫時,不必再寫WHERE,如果有多個查詢條件,例如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的幾個常用限定查詢方法如下表所示:
    方法 說明
    Restrictions.eq 等于
    Restrictions.allEq 使用Map,使用key/value進行多個等于的比對
    Restrictions.gt 大于 >
    Restrictions.ge 大于等于 >=
    Restrictions.lt 小于 <
    Restrictions.le 小于等于 <=
    Restrictions.between 對應SQL的BETWEEN子句
    Restrictions.like 對應SQL的LIKE子句
    Restrictions.in 對應SQL的in子句
    Restrictions.and and關系
    Restrictions.or or關系
    Restrictions.sqlRestriction SQL限定查詢

    Criteria 高級特性

     限定返回的記錄范圍

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

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

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

     criteria.setFirstResult(100);

     criteria.setMaxResults(20);

     對查詢結果進行排序

     //查詢所有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"));

     




    進行復合查詢示例:

     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 找個美女做老婆 閱讀(2358) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    本blog已經搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲短视频在线观看| 日日噜噜噜噜夜夜爽亚洲精品| 1000部免费啪啪十八未年禁止观看| 免费在线观影网站| ww4545四虎永久免费地址| 国产午夜鲁丝片AV无码免费| 国产成人精品日本亚洲专区| 亚洲视频国产精品| 一个人晚上在线观看的免费视频| 18禁男女爽爽爽午夜网站免费| 67pao强力打造67194在线午夜亚洲| 国产精品99精品久久免费| 一个人免费观看视频www| 2048亚洲精品国产| 成人精品一区二区三区不卡免费看| 亚洲午夜福利717| 亚洲av无码专区青青草原| 免费播放一区二区三区| 亚洲福利在线播放| 亚洲日韩中文字幕无码一区| 国产一区二区三区免费| 精品国产人成亚洲区| 福利片免费一区二区三区| 最近2022中文字幕免费视频| 精品国产_亚洲人成在线高清| 色天使亚洲综合一区二区| A级毛片内射免费视频| 亚洲人成电影在线天堂| 免费国产在线精品一区| 日韩免费无砖专区2020狼| 亚洲精品在线播放| 国产精品va无码免费麻豆 | 国产亚洲精品影视在线产品| 丁香花在线视频观看免费| 亚洲二区在线视频| 久久久久久国产精品免费免费男同| 亚洲人成网站18禁止一区 | 亚洲午夜未满十八勿入网站2| 精品无码人妻一区二区免费蜜桃 | 国产午夜亚洲精品不卡免下载 | 老司机福利在线免费观看|