posts - 66,  comments - 11,  trackbacks - 0
          Hibernate數(shù)據(jù)檢索:
          Criteria Query:通過面向對象化的設計,將數(shù)據(jù)查詢條件封裝為一個對象。Criteria本身只是一個查詢容器,具體的查詢條件需要通過Criteria.add方法添加到Criteria實例中。Expression對象具體描述了查詢條件。
          示例查詢并不常用,一方面它的使用比較繁瑣,另外從可讀性上來講也不如Expression來的直觀。但是在某些情況下卻有其特別的用途。
          示例查詢最常用的場景是組合查詢。我們常常需要在界面上提供若干查詢選項,然后根據(jù)用戶的選擇返回復合條件的結果。實例查詢在這里能發(fā)
          揮其特長:
          package com.wyq.demo.common.criteriaquery;

          import java.util.Iterator;

          import org.hibernate.Criteria;
          import org.hibernate.Session;
          import org.hibernate.criterion.DetachedCriteria;
          import org.hibernate.criterion.Example;
          import org.hibernate.criterion.Expression;
          import org.hibernate.criterion.Order;
          import org.hibernate.criterion.Projections;

          /** 
           * 
          @author 作者 
           * 
          @version 創(chuàng)建時間:2008-11-29 上午09:26:48 
           * 類說明 
           
          */
          public class TestCriteria {

              
          /**
               * @authorwyq
               * @功能:
               * 
          @param args
               
          */
              
          public static void main(String[] args) {
                  Session session 
          = null;
                  
          //新建一個criteria查詢容器
                  Criteria criteria = session.createCriteria(TUser.class);
                  
          /*(1)cireria查詢
                   * 構造查詢條件,Expression對象具體描述了查詢條件
                   * 在Hibernate3中,引入了Restrictions類作為Expression的替代
                   *  Expression.eq                  等于
                   * Expression.allEq               參數(shù)為一個map包好了多個屬性-值對應關系
                   * Expression.gt                  大于
                   * Expression.ge                  大于等于
                   * Expression.lt                  小于
                   * Expression.le                  小于等于
                   * Expression.between             表示某個字段位于2個數(shù)之間
                   * Expression.like                  模糊查詢
                   * Expression.in                  范圍查詢
                   * Expression.eqProperty          用于比較2個屬性之間的值"field=field"
                   * Expression.gtProperty          屬性1>屬性2
                   * Expression.geProperty          屬性1>=屬性2
                   * Expression.ltProperty          屬性1<屬性2
                   * Expression.leProperty          屬性1<=屬性2
                   * Expression.and                 and關系組合
                   * Expression.or                  or關系組合
                   * Expression.sql                 通過這個方法直接通過SQL語句限定查詢條件
                   
          */
                  
                  criteria.add(Expression.eq(
          "name","Erica"));
                  criteria.add(Expression.eq(
          "sex",new Integer(1)));
                   
          /*(2)示例查詢
                    * Example類實現(xiàn)了Criterion接口,同樣,它也可以用作Criteria的查詢條件。Example
                    * 的作用是:根據(jù)已有對象,查找屬性與之相符的其他對象
                    * 示例查詢最常用的場景是組合查詢。我們常常需要在界面上提供若干查詢選項,然后
                    * 根據(jù)用戶的選擇返回符合條件的結果。
                    * 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();
                    
          */
                   TUser exampleUser 
          = new TUser();
                   exampleUser.setName(
          "Erica");
                   criteria.add(Example.create(exampleUser));
                   
          /*
                    * (3)復合查詢
                    * 在原有查詢的基礎上,針對TUser對象的addresses屬性構造了新的查詢過濾條件
                    
          */
                   Criteria addCriteria 
          = criteria.createCriteria("addresses");
                   addCriteria.add(Expression.like(
          "address""%Shanghai%"));
                   
          /*
                    * (4)DetachedCriteria
                    * 使Criteria脫離session實例獨立存在,這樣,我們就可以將某些通用的Criteria
                    * 查詢條件進行抽離,每次使用時再與當前Session實例綁定以獲得更好的代碼重用效果
                    
          */
                   DetachedCriteria deCriteria 
          = DetachedCriteria.forClass(TUser.class);
                   deCriteria.add(Expression.eq(
          "name""Erica"));
                   deCriteria.add(Expression.eq(
          "sex",new Integer(1)));
                   
                   Criteria creiterias 
          = deCriteria.getExecutableCriteria(session);
                   Iterator it 
          = criteria.list().iterator();
                   
          /*
                    * (5)高級特性
                    * 通過criteria.setFirstResult/setMaxResults方法可以限制一次查詢返回的記錄范圍:
                    
          */
                   creiterias.setFirstResult(
          100);
                   creiterias.setMaxResults(
          20);
                   
          /*
                    * 排序
                    
          */
                   creiterias.addOrder(Order.asc(
          "name"));
                   
          /*
                    * 分組與統(tǒng)計
                    * 分組、統(tǒng)計表達式由Hibernate3新引入的Projections Class進行封裝
                    * 按照age分組查詢
                    * Projections.groupProperty()方法實際上是對SQL group by子句的封裝。同
                    * 樣,我們可以通過Projections.avg(),rowCount(),count(),max(),min(),countDistinct()
                    * 等方法實現(xiàn)查詢統(tǒng)計功能
                    
          */
                   creiterias.setProjection(Projections.groupProperty(
          "age"));
                   
              }

          }

          posted on 2009-11-05 11:23 王永慶 閱讀(324) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關注blogs

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 普陀区| 营山县| 沅江市| 东源县| 瓮安县| 台北市| 乌拉特中旗| 潍坊市| 华安县| 吴忠市| 乐山市| 青浦区| 朝阳县| 民乐县| 古浪县| 石狮市| 威信县| 阳高县| 惠东县| 家居| 枣庄市| 石嘴山市| 兴宁市| 高台县| 朝阳县| 梁平县| 安岳县| 皋兰县| 财经| 尉犁县| 连山| 新巴尔虎右旗| 水城县| 剑阁县| 团风县| 大洼县| 黄大仙区| 潮安县| 庆安县| 乡城县| 汶上县|