HQL連接查詢和注解


HQL連接查詢和注解

一:HQL連接查詢

  1. 各種連接查詢:

內連接: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;

  1. 聚合函數

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;

  1. 子查詢關鍵字:

all:子查詢返回所有記錄。

any:子查詢返回的任意的一條記錄。

some:與“any”意思相同

in:與“=any意思相同”

exists:子查詢語句至少返回一條記錄。

  1. 操作集合函數或屬性。

size()或size:獲取集合中的元素數目。

minIndex()或minIndex:對於建立索引的集合,獲取最小的索引

maxIndex()或maxIndex:對於建立索引的集合,獲取最大的索引。

minElement()或minElement:對於包含基本類型的元素集合,獲得集合中取值最小的元素。

maxElement()或maxElement: 對於包含基本類型的元素集合,獲得集合中取值最大的元素。

Elements();獲取集合中的所有元素。

二:查詢性能優化

  1. 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。

三:注解

  1. 使用hibernate注解的步驟如下:

(1.)使用注解配置持久化類及對象的關聯關系。

(2.)在hibernate配置文件(hibernate.cfg.xml)中聲明持久化類,語法如下:

                    <mapping class=”持久化類完整限定名”>

  1. 配置持久化類的常用注解:

@Entity:將一個類聲明為持久化類。

@Table:為持久化映射指定表。

@Id:聲明了持久化類的表示屬性。

@GeneratedValue:定義表示屬性的生成策略。

@UniqueConstraint:定義表的唯一約束。

@Lob:表示屬性將被持久化為BLOD或者CLOD類型。

@Column:將屬性映射到數據庫字段。

@Transient:指定可以忽略的屬性,不用持久化到數據庫。

        

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM