<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)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久精品国产亚洲AV香蕉| 亚洲国产三级在线观看| 精品亚洲国产成人| 免费视频专区一国产盗摄| 亚洲精品亚洲人成在线观看麻豆| 国产白丝无码免费视频| 91天堂素人精品系列全集亚洲| 久久久精品午夜免费不卡| 亚洲欧洲日产国产综合网| 91精品免费不卡在线观看| 亚洲日本乱码一区二区在线二产线| 久久久久国产精品免费看| 亚洲精品中文字幕无码AV| 久草视频在线免费| 亚洲偷自拍另类图片二区| 国产18禁黄网站免费观看| 国产精品成人啪精品视频免费| 国产成人A亚洲精V品无码| 免费av一区二区三区| 亚洲美女视频一区二区三区| 久久精品无码一区二区三区免费| 亚洲精品无码久久久久牙蜜区| 国产免费变态视频网址网站| 四虎影视久久久免费观看| 亚洲AV日韩AV天堂久久 | 黄色网址大全免费| 亚洲日韩激情无码一区| 最近中文字幕免费2019| 亚洲乱色熟女一区二区三区蜜臀| 亚洲Av无码国产情品久久 | 亚洲AV无码久久久久网站蜜桃| 在线观看亚洲免费| 国产精品免费一区二区三区| 2022年亚洲午夜一区二区福利| 最新中文字幕电影免费观看| 又大又硬又爽又粗又快的视频免费| 亚洲日本久久一区二区va| 亚洲人成网站在线观看青青| 中文字幕天天躁日日躁狠狠躁免费| 亚洲男人的天堂网站| 国产精品亚洲成在人线|