posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          有關(guān)Criteria

          Posted on 2007-08-09 13:57 semovy 閱讀(1282) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate

          Criteria:

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

          1)criteria.add(Restrictions.gt("age", new Integer(20)));

          2)criteria.add(Restrictions.lt("age", new Integer(40)));

          3)criteria.add(Restrictions.or(Restrictions.eq("age", new Integer(20)), Restrictions.isNull("age")));

          crit.add(Restrictions.ilike("name","1", MatchMode.END));

          // // ilikeiignore之意,所以查詢englishName"Optima?XL?100K?Ultracentrifuge"(忽略大小寫)的記錄

          4)criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));

          5) Integer[] ages = {new Integer(20), new Integer(40)};

          Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};

          criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));

           

          6) criteria.setFirstResult(51);

          criteria.setMaxResult(50);

            7) 統(tǒng)計(jì)表rowCount()、count()、max()、min()、countDistinct()

          criteria.setProjection(Projections.avg("age"));

            8)分組20,20,25,30 à 20.25.30

                 criteria.setProjection(Projections.groupProperty("age"));

           9)結(jié)合統(tǒng)計(jì)分組

             ProjectionList projectionList = Projections.projectionList();

          projectionList.add(Projections.groupProperty("age"));

          projectionList.add(Projections.rowCount());

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

          criteria.setProjection(projectionList);

          10) Query Criteria Id: data type Long

          projectionList.add(crit.add( Expression.idEq( 11111L) );

          11) Query Criteria Id: Not Equal

           crit.add( Expression.ne( "name""noName" ) );)

          12)crit.setProjection(Projections.rowCount());

          13示不重復(fù)記錄

          criteria.setResultTransformer(criteria.DISTINCT_ROOT_ENTITY);

          List users = criteria.list();

          Restrictions的幾個(gè)常用限定詢方法如下表所示:

          方法

          Restrictions.eq

          等於

          Restrictions.allEq

          使用Map,使用key/value進(jìn)行多個(gè)等於的比對(duì)

          Restrictions.gt

          大於 >

          Restrictions.ge

          大於等於 >=

          Restrictions.lt

          小於 <

          Restrictions.le

          小於等於 <=

          Restrictions.between

          對(duì)應(yīng)SQLBETWEEN子句

          Restrictions.like

          對(duì)應(yīng)SQLLIKE子句

          Restrictions.in

          對(duì)應(yīng)SQLin子句

          Restrictions.and

          and關(guān)係

          Restrictions.or

          or關(guān)係

          Restrictions.sqlRestriction

          SQL限定

          HQLHibernate Query Language

           PS:

           1:HOL是不區(qū)分大小寫的,但名稱是區(qū)分大小寫的.

               2:如果User類別提供有適當(dāng)?shù)慕?gòu)方法,則可以在使用HQL時(shí)直接指定新建一個(gè)物件傳回

          Query query = session.createQuery("select new User(user.name, user.age) from User as user");

              3. 如果試圖使用SessionsaveOrupdate()方法,則會(huì)新增一筆資料而不是更新原有的資料。

              4. 還可以結(jié)合having子句,例如只將平均大於20的資料分組顯示出來:

          Query query = session.createQuery("select user.sex, avg(user.age) from User user group by user.sex having avg(user.age) > 20");

             5. 更新與刪除的時(shí)候

                       Session session = sessionFactory.openSession();

          Transaction tx= session.beginTransaction();

          Query query = session.createQuery("update User set name='momor' where name='bbb'");

          query.executeUpdate();

          tx.commit();

          session.close();

           

          Hibernate:HQL/QBC查詢語言比的用法

          Hib索方式
          1'
          導(dǎo)對(duì)圖檢索方式。通經(jīng)對(duì)象,調(diào).iterator()方法可以得到order對(duì)
          如果是首次執(zhí)行此方法,Hib會(huì)從數(shù)據(jù)載關(guān)聯(lián)order對(duì)象,否就從存中得到。
          2'OID索方式。通sessionget,load方法知道了OID的情況下可以使用
          3'HQL
          索方式。使用面向對(duì)象的HQL查詢語sessionfind方法利用HQL查詢
          4'QBC
          索方式。利用QBCAPI索它是封裝了基于字符串的查詢語
          5'
          本地的SQL索方式。使用本地?cái)?shù)據(jù)SQL查詢語Hib會(huì)負(fù)責(zé)索到的JDBC結(jié)果集映射持久化對(duì)。

          種檢索方式的使用場(chǎng)合和特點(diǎn):

          HQL 
           是面向對(duì)象的查詢語言,同SQL有些相似是Hib中最常用的方式。
                 
          查詢?cè)O(shè)定各種查詢條件。
                 
          支持投影查詢索出對(duì)象的部分屬性。
                 
          支持分頁查詢,允使用havinggroup by
                 
          提供內(nèi)制的聚集函數(shù),sum(),min(),max()
                 
          調(diào)用用的自定SQL
                 
          支持子查詢,嵌入式查詢
                 
          支持動(dòng)態(tài)綁定參數(shù)
          使用Query接口替sessionfind方法。
             Query Q = session.createQuery("from customer as c where c.name = :customerName" + "and c.age = :customerAge");
             query.setString ("customerName" , "tom");
             query.setInteger("customerAge" , "21");
             list result = query.list();
          QBC :  QBCAPI
          提供了另一方式,主要是Criteria接口、Criterion接口和Expression
             Criteria criteria = session.createCriteria(customer.class);
             Criterion criterion1 = Expression.like("name","t%");
             Criterion criterion2 = Expression.eq("age",new Integer(21));
             Critera = criteria.add(criterion1) ;
             Critera = criteria.add(criterion2) ;
             list result = criteria.list(); 
             
          或是: list result = session.createCriteria(Customer.class).add(Expression.eq("this.name","tom")).list(); 
          SQL :  
          采用HQLQBC時(shí),Hib生成SQL句適用所有數(shù)據(jù)
             Query query  = session.createSQLQuery("select {c.*} from customers c where c.name like : customername " + "and c.age = :customerage","c",customer.calss);
             query.setString("customername","tom");
             query.setInteger("customerage","21");
             list result = query.list();
          /////////////
          態(tài)查詢
             HQL 
          session.createQuery("from employee");
             QBC 
          session.createCriteria(employee.class);
             HQL : session.createQuery("from hourlyEmployee");
             QBC : session.createCriteria(hourlyEmployee.class);
             
          下面的HQL查詢語句將索出所有的持久化對(duì)象:
             from java.lang.Object ;
             from java.io.serializable ;
          ////////////
          查詢的排序
             1'
          查詢結(jié)果按照客姓名升序排列:
             HQL 

                  Query query = session.createQuery ("from customer c order by c.name");
             QBC 

                  Criteria criteria = session.createCriteria(customer.class);
                  criteria.addOrder(order.asc("name"));
             HQL :
                  Query query = session.createQuery ("from customer c order by c.name asc , c.age desc");
             QBC :
                  Criteria criteria = session.createCriteria(customer.class);
                  criteria.addOrder(order.asc ("name"));
                  criteria.addOrder(order.desc("age")); 

                  import net.sf.hibernate.pression.Order
                  import mypack.Order
                  ...........
                  Criteria criteria = session.createCritria (mypack.Order.class);
                  criteria.addOrder(net.sf.hibernate.Order.asc("name"));
          ///////////HQL
          句的參數(shù)Query接口提供了定各Hib映射型的方法。
                  setBinary()
                  setString()
                  setBoolean()
                  setByte()
                  setCalendar()
                  setCharacter()
                  setDate()
                  setDouble()
                  setText()
                  setTime()
                  setTimestamp()
                  setEntity()//
          把參數(shù)與一個(gè)持久化的事例lsit result = session.createQuery("from order o where o.customer =            :customer").setEntity("customer" , customer).list ;
                  setParameter()//
          定任意型的參數(shù)
                  setProperties()//
          把命名參數(shù)與一個(gè)對(duì)象的屬性值綁 Query query = session.createQuery("from customer c where c.name =:     name " + "and c.age =:age" );
                  Query.setProperties(customer); 

           

          主站蜘蛛池模板: 方山县| 临朐县| 蕉岭县| 靖边县| 临泽县| 长治县| 巴东县| 华亭县| 隆尧县| 株洲县| 常宁市| 商南县| 中西区| 荃湾区| 大名县| 大化| 临泽县| 疏附县| 永善县| 湘乡市| 营口市| 定襄县| 韩城市| 饶平县| 微博| 九龙坡区| 白水县| 蒙城县| 彭阳县| 上饶市| 尼木县| 太仆寺旗| 宁明县| 密云县| 邳州市| 宣威市| 措美县| 丰宁| 天峻县| 龙井市| 太康县|