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

          有關Criteria

          Posted on 2007-08-09 13:57 semovy 閱讀(1277) 評論(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) 統計表rowCount()、count()、max()、min()、countDistinct()

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

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

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

           9)結合統計分組

             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示不重復記錄

          criteria.setResultTransformer(criteria.DISTINCT_ROOT_ENTITY);

          List users = criteria.list();

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

          方法

          Restrictions.eq

          等於

          Restrictions.allEq

          使用Map,使用key/value進行多個等於的比對

          Restrictions.gt

          大於 >

          Restrictions.ge

          大於等於 >=

          Restrictions.lt

          小於 <

          Restrictions.le

          小於等於 <=

          Restrictions.between

          對應SQLBETWEEN子句

          Restrictions.like

          對應SQLLIKE子句

          Restrictions.in

          對應SQLin子句

          Restrictions.and

          and關係

          Restrictions.or

          or關係

          Restrictions.sqlRestriction

          SQL限定

          HQLHibernate Query Language

           PS:

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

               2:如果User類別提供有適當的建構方法,則可以在使用HQL時直接指定新建一個物件傳回

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

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

              4. 還可以結合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. 更新與刪除的時候

                       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'
          圖檢索方式。通象,調.iterator()方法可以得到order
          如果是首次行此方法,Hib會從數據載關聯order象,否就從存中得到。
          2'OID索方式。通sessiongetload方法知道了OID的情況下可以使用
          3'HQL
          索方式。使用面向象的HQL查詢語sessionfind方法利用HQL查詢
          4'QBC
          索方式。利用QBCAPI索它是封裝了基于字符串的查詢語
          5'
          本地的SQL索方式。使用本地數據SQL查詢語Hib負責索到的JDBC果集映射持久化

          種檢索方式的使用合和特點:

          HQL 
           是面向象的查詢語言,同SQL有些相似是Hib中最常用的方式。
                 
          查詢設定各種查詢條件。
                 
          支持投影查詢索出象的部分屬性。
                 
          支持分頁查詢,允使用havinggroup by
                 
          提供內制的聚集函數,sum()min(),max()
                 
          調用用的自定SQL
                 
          支持子查詢,嵌入式查詢
                 
          支持動態綁定參數
          使用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,Hib生成SQL句適用所有數據
             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();
          /////////////
          態查詢
             HQL 
          session.createQuery("from employee");
             QBC 
          session.createCriteria(employee.class);
             HQL : session.createQuery("from hourlyEmployee");
             QBC : session.createCriteria(hourlyEmployee.class);
             
          下面的HQL查詢語句將索出所有的持久化象:
             from java.lang.Object ;
             from java.io.serializable ;
          ////////////
          查詢的排序
             1'
          查詢結果按照客姓名升序排列:
             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
          句的參數Query接口提供了定各Hib映射型的方法。
                  setBinary()
                  setString()
                  setBoolean()
                  setByte()
                  setCalendar()
                  setCharacter()
                  setDate()
                  setDouble()
                  setText()
                  setTime()
                  setTimestamp()
                  setEntity()//
          把參數與一個持久化的事例lsit result = session.createQuery("from order o where o.customer =            :customer").setEntity("customer" , customer).list ;
                  setParameter()//
          定任意型的參數
                  setProperties()//
          把命名參數與一個象的屬性值綁 Query query = session.createQuery("from customer c where c.name =:     name " + "and c.age =:age" );
                  Query.setProperties(customer); 

           

          主站蜘蛛池模板: 田东县| 广南县| 曲松县| 贡觉县| 衡阳市| 临沂市| 五莲县| 横山县| 庄河市| 浦县| 峨眉山市| 界首市| 凭祥市| 玉屏| 北京市| 新巴尔虎右旗| 土默特右旗| 渝北区| 合江县| 航空| 卢龙县| 秦安县| 寻甸| 高阳县| 津南区| 定结县| 昌图县| 祥云县| 黄石市| 绍兴市| 沙洋县| 新泰市| 建水县| 江源县| 公安县| 新宁县| 维西| 定结县| 资阳市| 榆中县| 科尔|