posts - 66,  comments - 11,  trackbacks - 0
          Hibernate數(shù)據(jù)檢索:
          Criteria Query:通過面向?qū)ο蠡脑O(shè)計(jì),將數(shù)據(jù)查詢條件封裝為一個(gè)對(duì)象。Criteria本身只是一個(gè)查詢?nèi)萜鳎唧w的查詢條件需要通過Criteria.add方法添加到Criteria實(shí)例中。Expression對(duì)象具體描述了查詢條件。
          示例查詢并不常用,一方面它的使用比較繁瑣,另外從可讀性上來(lái)講也不如Expression來(lái)的直觀。但是在某些情況下卻有其特別的用途。
          示例查詢最常用的場(chǎng)景是組合查詢。我們常常需要在界面上提供若干查詢選項(xiàng),然后根據(jù)用戶的選擇返回復(fù)合條件的結(jié)果。實(shí)例查詢?cè)谶@里能發(fā)
          揮其特長(zhǎng):
          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)建時(shí)間:2008-11-29 上午09:26:48 
           * 類說(shuō)明 
           
          */
          public class TestCriteria {

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

          }

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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關(guān)注blogs

          搜索

          •  

          最新評(píng)論

          • 1.?re: 心中的那個(gè)她[未登錄]
          • 如果心情能那么容易放開就好了,碰到她是我的緣分,但是她的緣分不知道在哪里。
          • --王永慶
          • 2.?re: 心中的那個(gè)她[未登錄]
          • 兄弟,喜歡就大膽去追好了,就是因?yàn)橄矚g才會(huì)有不愉快,如果想一輩子沒有這些煩惱,找一個(gè)可有可無(wú)的人就好了。這種事講的是緣分吧。別人對(duì)你好不好其實(shí)不太重要。放開心情就好了。
          • --萍水相逢
          • 3.?re: 心中的那個(gè)她
          • 只能同甘不能共苦,就他媽算了吧,程序員也是人啊!我現(xiàn)在也很討厭女的不理解人情。
          • --咖啡妝
          • 4.?re: 難以割舍的那份情感
          • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
          • --王永慶
          • 5.?re: 難以割舍的那份情感
          • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
          • --隔葉黃鶯

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 绥化市| 石渠县| 奉贤区| 山阴县| 宜兴市| 康保县| 九寨沟县| 宜都市| 庆城县| 通辽市| 津市市| 江油市| 犍为县| 麦盖提县| 甘南县| 张家港市| 项城市| 胶南市| 新巴尔虎左旗| 井研县| 日照市| 乐安县| 大连市| 贡山| 秭归县| 抚顺市| 宕昌县| 涡阳县| 镇巴县| 苏尼特右旗| 新疆| 洛宁县| 浑源县| 仙居县| 澳门| 厦门市| 和顺县| 新蔡县| 徐闻县| 定边县| 扎囊县|