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 刪除重復數據
2、參數綁定機制
●
q.setParameter("name", name);
Hibernate 能根據參數值的 Java 類型推斷出對應的映射類型,對于日期類型,如 java.util.Date 類型,會對應多種映射類型,這時候需要顯示指定。
q.setParameter("date", Hibernate.DATE);
●
q.setProperties(obj);
根據 obj 的屬性名對應 HQL 語義中定義的命名參數進行查詢。
3、HQL 子查詢
用于子查詢的集合函數 size()、minIndex()、maxIndex()、minElement()、maxElement() 和 elements()。
4、集合過濾
對于某持久化對象的 items 屬性內元素性能優化(過濾集合內數據、排序等)。
Session.createFilter(object, string);
返回是 Query 類型
參數 object 是持久化對象的集合。
參數 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() 關聯查詢
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 執行查詢。該方法主要通過 org.hibernate.criterion.DetachedCriteria 類實現。
6、Native SQL 查詢
應用程序中使用與數據庫相關的 SQL 查詢語句
6-1、Native SQL 應用程序接口
主要使用 SQLQuery.addEntity() 實現返回結果為實體的查詢,SQLQuery.addScalar() 則返回標量值。
SQLQuery.addJoin(String alias, String path) 用于將映射對象所關聯的實體或集合對應起來。
6-2、命名查詢
sess.getNamedQuery(string);
在 xml 文件中使用 <! [CDATA []] > 元表示其中的內容是區分其他元素定義的純文本。例如: < 符號。
6-3、使用存儲過程
Hibernate 3.0 以上的版本已經支持和利用存儲過程來進行查詢,存儲過程返回的參數是標量與實體,這里可以利用返回類型的定義將存儲過程返回的參數映射到對象的屬性中。
<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
黃小二 閱讀(455)
評論(0) 編輯 收藏 所屬分類:
S/S2SH 、
J2EE 、
J2SE