隨筆-7  評論-24  文章-102  trackbacks-0


          1、查詢返回

          ● 查詢語句可以返回多個對象或屬性,存放在 Object[] 隊列中。

          ● 將查詢結果的所有屬性都存放在一個 List 對象中:
            select new list(xxx.xxxx,xx.xx) .....
          這里的 new list 是實例化 java.util.ArraryList 對象。

          ● 將查詢結果封裝成一個安全的 Java 對象
            select new EncCustomer(xx.xxx, xx.xx)....

          ● 將查詢結果封裝成 Map 對象(利用別名)
            select new map(xx.xxx as aaaa, xx.xxxx as bb) .....
          .....
            Map obj = (Map)list.get(i);
            obj.get("aaaa"); 
            obj.get("bb");


          ● distinct 刪除重復數(shù)據(jù)



          2、參數(shù)綁定機制


            q.setParameter("name", name);
            Hibernate 能根據(jù)參數(shù)值的 Java 類型推斷出對應的映射類型,對于日期類型,如 java.util.Date 類型,會對應多種映射類型,這時候需要顯示指定。
            q.setParameter("date", Hibernate.DATE);


            q.setProperties(obj);
            根據(jù) obj 的屬性名對應 HQL 語義中定義的命名參數(shù)進行查詢。



          3、HQL 子查詢
             用于子查詢的集合函數(shù) size()、minIndex()、maxIndex()、minElement()、maxElement() 和 elements()。



          4、集合過濾
            對于某持久化對象的 items 屬性內元素性能優(yōu)化(過濾集合內數(shù)據(jù)、排序等)。

            Session.createFilter(object, string);
            返回是 Query 類型
            參數(shù) object 是持久化對象的集合。
            參數(shù) string 是 HQL 的過濾條件

          //過濾 prod 的集合 items
          List items = session.createFilter(prod.getItems(),
           "this.unitCost<100 order by this.ListPrice desc").List();
          //綁定過濾的結果 itmes 到屬性
          prod.setItems(items);



          5、條件查詢 QBC

          5-1、Restrictions 過濾結果集


          5-2、結果集排序
           .addOrder(Order.asc("name"))
           .addOrder(Order.desc("category"))
           .list();


          5-3、createCriteria() 關聯(lián)查詢
            List list = sess.createCriteria(Product.class)
           .add(Restrictions.like("name", "%o%"))
           .createCriteria("items")  
           .add(Restrictions.ge("listPrice", new Float(100.0))
           .list();
          //返回一個新的 Criteria 實例,該實例引用 items 集合中的元素,并且為該集合元素增加了元素屬性 listPrice 大于等于 100.0 的過濾條件。

          或者使用別名
           .createAlias("items", "ite")
           .add(Restrictions.ge("ite.listPrice", new Float(100.0))


          5-4、設置加載策略
           .setFetchMode("items", FetchMode.EAGER)
           .list();

            DEFAULT:默認
            EAGER/JOIN:強制立即加載
            LAZY/SELECT:強制延遲加載


          5-5、聚合和分組  org.hibernate.criterion.Projections

           .setProjection(Projections.rowCount())
           .uniqueResult();

           .add(Projections.groupProperty("imagePath"))
           .list();


          5-6、離線與子查詢

            離線查詢方式在 Session 范圍之外定義一個離線查詢,然后使用任意的 Session 執(zhí)行查詢。該方法主要通過 org.hibernate.criterion.DetachedCriteria 類實現(xiàn)。



          6、Native SQL 查詢

             應用程序中使用與數(shù)據(jù)庫相關的 SQL 查詢語句

          6-1、Native SQL 應用程序接口

            主要使用 SQLQuery.addEntity() 實現(xiàn)返回結果為實體的查詢,SQLQuery.addScalar() 則返回標量值。
            SQLQuery.addJoin(String alias, String path) 用于將映射對象所關聯(lián)的實體或集合對應起來。

           
          6-2、命名查詢
            sess.getNamedQuery(string);

            在 xml 文件中使用 <! [CDATA []] > 元表示其中的內容是區(qū)分其他元素定義的純文本。例如: < 符號。


          6-3、使用存儲過程
            Hibernate 3.0 以上的版本已經支持和利用存儲過程來進行查詢,存儲過程返回的參數(shù)是標量與實體,這里可以利用返回類型的定義將存儲過程返回的參數(shù)映射到對象的屬性中。

          <sql-query name="productQuery" callable="true">
            <return alias="prod" class="petstore.domain.Product">
              <return-property name="productId" column="PRODUCTID" />
              <return-property name="description" column="DESCRIPTION" />
              <return-property name="name" column="NAME" />
            </return>
            {? = call getProduct(?)}
          </sql-query>

          List list = query.list();

           

          posted on 2009-04-12 02:11 黃小二 閱讀(457) 評論(0)  編輯  收藏 所屬分類: S/S2SHJ2EEJ2SE
          主站蜘蛛池模板: 天峨县| 玛纳斯县| 定兴县| 疏勒县| 集安市| 池州市| 阿克苏市| 叙永县| 兴义市| 徐闻县| 临武县| 浑源县| 浪卡子县| 鄂尔多斯市| 阿合奇县| 钟祥市| 修文县| 太原市| 即墨市| 博爱县| 阆中市| 山阳县| 富蕴县| 且末县| 额济纳旗| 玉龙| 洮南市| 太仆寺旗| 宜川县| 贺兰县| 乌什县| 金堂县| 宣恩县| 岱山县| 镇沅| 湖南省| 乡宁县| 越西县| 苏尼特右旗| 永胜县| 北川|