Hibernate HQL



HQL查詢

HQL查詢:簡單屬性查詢:

1.單一屬性查詢,返回屬性結果集列表,元素類型和實體類中相應的屬性類型一致。

2.多個屬性查詢,多個屬性查詢返回的是對象數組,對象數組的長度取決於屬性的個數,對象數組中元素的類型取決於屬性在實體類中屬性的類型。 (我們可以使用增強for循環結合數組下標來獲得屬性具體信息)

3.如果覺得返回數組不夠對象化,那麼我們可以在實體中構造我們需要的構造方法,來獲得我們需要的實體對象

 

HQL查詢:對象實體查詢:

N + 1問題,就是發出了N+1sql語句

1:首先發出查詢對象id列表的語句

N:根據id到緩存中查詢,如果緩存中不存在與之匹配的數據,那麼會根據id發出相應的sql語句

  listiterate的區別?

    list: 默認情況下list每次都會發出sql語句,list會將數據放到緩存中,而不利用緩存

    iterate:默認情況下iterate利用緩存,如果緩存中不存在會出現N+1問題

    備註:Hibernate4.x之後好像已經避免了N+1問題了吧。

 

HQL條件查詢:

1.可以採用拼字符串的方式傳遞參數(不推薦使用,就有點類似jdbc中的Statement)

2.可以採用? 填充佔位符的形式來添加參數(推薦使用,就類似jdbc中的PreapredStatement)

3.可以使用參數名來傳遞參數(類似於佔位符但是要符合一定格式比如  name=:myname) 不是特殊情況就不要使用這種方式,也沒看到有什麼好處。

4.如果傳遞多個參數,可以採用setParamterList方法:就當是一個小技巧吧,沒有它也能做。

5.hql中可以使用數據庫函數 如:date_format

備註:填充佔位符的時候:索引下標是從0開始的,jdbc是從1開始的。

方法鏈式編程推薦使用

如果知道返回結果肯定是唯一的話,我們就不需要使用list()方法了,我們直接使用uniqueResult()方法

 

HQL查詢:直接使用原生SQL查詢

hibernate直接使用sql語句查詢

備註:它只是把HQL轉換爲SQL其它的所有都沒有變化。該怎麼用就怎麼用.

備註:如果遇到Hibernate性能瓶頸或是使用HibernateHQL實現太複雜的話,我們就需要考慮使用原生SQL了。

HQL查詢外置命名查詢

1.咋映射文件中使用<query>標籤定義hql  (完全不推薦,除非是有什麼特殊要求)

2.在程序中使用session.getNamedQuery()方法得到hql查詢串。

 

HQL查詢查詢過濾器

1.在映射文件中定義過濾參數

2.在類的映射中使用過濾參數

3.在程序中必須顯示的啓用過來長期,並且爲過濾器參數賦值

HQL查詢:  分頁查詢

1.setFirstResult(),從哪開始

2.setMaxResults(),每頁顯示的記錄數

分頁查詢很重要,一定要很掌握。

 

HQL查詢:對象導航查詢

 有時候它使用起來比SQL更方便。

HQL查詢:連接查詢

1.內連接  (即左右兩邊都有數據)    記錄是最少的

2.外連接 (分爲左外連接、右外連接)

按道理來說,外聯結應該還有一個全連接的,但是我並沒有在hibernate出發現,不過在Oracle中全外連接記錄是最多的。

HQL查詢:統計查詢

統計查詢(挺重要的)

備註:分組函數

 

HQL查詢:DML風格的操作(儘量少用,因爲和緩存不同步)


參考我自己寫的程序hibernate4.x項目


導出建表語句的方法:

Configuration cfg = new Configuration().configure(); 
  SchemaExport export = new SchemaExport(cfg);
  export.create(true, true);





 


發佈了104 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章