HQL鏈接查詢和註解數據庫
一:HQL鏈接查詢
- 各類鏈接查詢: 內鏈接:inner join或join From Entity inner [inner] join [fetch] Entity.property;
左外鏈接:left outer join或left join From Entity left[outer] join [fetch] Entity.property;緩存
迫切左外鏈接:left outer join fetch或left join fetch 右外鏈接:right outer join或right join 迫切鏈接:inner join fetch或join fetch 注:迫切鏈接要使用對象鏈接,否則的話會出錯。性能優化
等值鏈接:
From Dept d,Emp p where d=e.dept;
- 聚合函數 select count(),sum(sal),min(sal),max(sal),avg(sal)from Emp; List<Object[]>list=query.list(); for (Object[] o:list) { System.out.println("總:"+o[0]+"和:"+o[1]+"最小值:"+o[2]+"最大值:"+o[3]+"平均數:"+o[4]); }//省略其它代碼 按職位統計員工個數: select e.job,count() from Emp e group by e.job
統計每一個部門下的員工個數而且大於2的顯示輸出: select e.job,count() from Emp e group by e.job having count()>2; 3. 子查詢關鍵字: all:子查詢返回全部記錄。 any:子查詢返回的任意的一條記錄。 some:與「any」意思相同 in:與「=any意思相同」 exists:子查詢語句至少返回一條記錄。 4. 操做集合函數或屬性。 size()或size:獲取集合中的元素數目。 minIndex()或minIndex:對於創建索引的集合,獲取最小的索引 maxIndex()或maxIndex:對於創建索引的集合,獲取最大的索引。 minElement()或minElement:對於包含基本類型的元素集合,得到集合中取值最小的元素。 maxElement()或maxElement: 對於包含基本類型的元素集合,得到集合中取值最大的元素。 Elements();獲取集合中的全部元素。app
二:查詢性能優化
- hibernate查詢優化策略: (1.)使用迫切左外鏈接,或迫切鏈接查詢策略,配置二級緩存和查詢等方式,減小select語句數目,下降訪問數據庫的頻率。 (2.)使用延遲加載等方式避免加載多餘不須要訪問的數據。 (3.)使用Query接口的iterate()方法減小select語句的字段,下降訪問數據庫的數據量,並結合緩存等機制減小數據庫的訪問次數,提升查詢效率。 2.HQL優化: (1.)避免使用or操做的不當。 (2.)避免使用not。 (3.)避免使用like的特殊形式。 (4.)避免使用having子句。 (5.)避免使用distinct。 (6.)索引在如下狀況下失效,使用時注意。 對字段使用函數,該字段的索引將不起做用。如:substring(aa,1,2)=’xxx’ 對字段進行計算,該字段的索引將不起做用。如:price+10。
三:註解
- 使用hibernate註解的步驟以下: (1.)使用註解配置持久化類及對象的關聯關係。 (2.)在hibernate配置文件(hibernate.cfg.xml)中聲明持久化類,語法以下: <mapping class=」持久化類完整限定名」>
- 配置持久化類的經常使用註解: @Entity:將一個類聲明爲持久化類。 @Table:爲持久化映射指定表。 @Id:聲明瞭持久化類的表示屬性。 @GeneratedValue:定義表示屬性的生成策略。 @UniqueConstraint:定義表的惟一約束。 @Lob:表示屬性將被持久化爲BLOD或者CLOD類型。 @Column:將屬性映射到數據庫字段。 @Transient:指定能夠忽略的屬性,不用持久化到數據庫。