posts - 66,  comments - 11,  trackbacks - 0
          Hibernate數據檢索:
          Criteria Query:通過面向對象化的設計,將數據查詢條件封裝為一個對象。Criteria本身只是一個查詢容器,具體的查詢條件需要通過Criteria.add方法添加到Criteria實例中。Expression對象具體描述了查詢條件。
          示例查詢并不常用,一方面它的使用比較繁瑣,另外從可讀性上來講也不如Expression來的直觀。但是在某些情況下卻有其特別的用途。
          示例查詢最常用的場景是組合查詢。我們常常需要在界面上提供若干查詢選項,然后根據用戶的選擇返回復合條件的結果。實例查詢在這里能發
          揮其特長:
          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 創建時間: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               參數為一個map包好了多個屬性-值對應關系
                   * Expression.gt                  大于
                   * Expression.ge                  大于等于
                   * Expression.lt                  小于
                   * Expression.le                  小于等于
                   * Expression.between             表示某個字段位于2個數之間
                   * 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類實現了Criterion接口,同樣,它也可以用作Criteria的查詢條件。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();
                    
          */
                   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"));
                   
          /*
                    * 分組與統計
                    * 分組、統計表達式由Hibernate3新引入的Projections Class進行封裝
                    * 按照age分組查詢
                    * Projections.groupProperty()方法實際上是對SQL group by子句的封裝。同
                    * 樣,我們可以通過Projections.avg(),rowCount(),count(),max(),min(),countDistinct()
                    * 等方法實現查詢統計功能
                    
          */
                   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

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阿拉善右旗| 天长市| 依兰县| 房产| 灵寿县| 乌鲁木齐市| 闵行区| 华池县| 恩施市| 牡丹江市| 富锦市| 五大连池市| 隆子县| 鄂托克前旗| 文登市| 开平市| 通州区| 洛宁县| 扎囊县| 靖边县| 泸水县| 茂名市| 墨玉县| 改则县| 大化| 通海县| 望城县| 余江县| 涟水县| 时尚| 万山特区| 彰化县| 通道| 鄄城县| 巴马| 鹤山市| 玉门市| 鹤壁市| 桂平市| 米脂县| 石泉县|