隨筆 - 0, 文章 - 75, 評(píng)論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          HQL進(jìn)階

          HQL優(yōu)化


          避免or操作


          where
          子句包含or
          操作,執(zhí)行時(shí)不使用索引


          from
          House
          where
          street_id
          =
          '1000'
          or
          street_id
          =
          '1001'


          可以使用in條件來替換


          from
          House
          where
          street_id
          in
          ('1001','1000')



          避免使用not


          where
          子句包含not
          關(guān)鍵字,執(zhí)行時(shí)該字段的索引失效


          from House as h where
          not
          (h.price
          >1800)


          使用比較運(yùn)算符替換not


          from
          House as h
          where
          h.price
          <=
          1800



          避免like的特殊形式



          查詢時(shí),盡可能少使用
          like


          避免having子句


          盡可能在where
          子句中指定條件


          避免使用distinct


          在不要求或允許冗余時(shí),應(yīng)避免使用distinct



          Hibernate數(shù)據(jù)檢索策略


          Hibernate提供多種數(shù)據(jù)檢索策略,常用的有:



          立即檢索



          延遲檢索


          不同檢索策略的作用域及默認(rèn)檢索策略



          作用域 可選的檢索策略
          默認(rèn)的檢索策略 運(yùn)行時(shí)行為受影響的檢索方法


          類級(jí)別 立即檢索/延遲檢索 延遲檢索 僅影響Sessionload()方法



          關(guān)聯(lián)級(jí)別 立即檢索/延遲檢索 延遲檢索 影響Sessionload()get()




          檢索策略的運(yùn)行機(jī)制



          類型


          立即檢索


          類級(jí)別


          立即加載檢索方法指定的對(duì)象


          關(guān)聯(lián)級(jí)別


          立即加載與檢索方法指定的對(duì)象關(guān)聯(lián)的對(duì)象,可以設(shè)定批量檢索數(shù)量


          優(yōu)點(diǎn)


          對(duì)應(yīng)用程序完全透明,不管對(duì)象處于持久化狀態(tài),還是游離狀態(tài),應(yīng)用程序都可以方便地從一個(gè)對(duì)象導(dǎo)航到與它關(guān)聯(lián)的對(duì)象缺點(diǎn)


          (1)select語句數(shù)目多


          (2)可能會(huì)加載應(yīng)用程序不需要訪問的對(duì)象,造成內(nèi)存空間的浪費(fèi)


          ---------------------------


          類型


          延遲檢索


          類級(jí)別


          延遲加載檢索方法指定的對(duì)象


          關(guān)聯(lián)級(jí)別


          延遲加載與檢索方法指定的對(duì)象關(guān)聯(lián)的對(duì)象,可以設(shè)定批量檢索數(shù)量


          優(yōu)點(diǎn)


          由應(yīng)用程序決定需要加載那些對(duì)象,可以避免執(zhí)行多余的select語句,以及避免加載應(yīng)用程序不需要訪問的對(duì)象。提高檢索性能,節(jié)省內(nèi)存空間


          缺點(diǎn)


          應(yīng)用程序如果希望訪問游離狀態(tài)的代理類實(shí)例,必須保證它在持久化狀態(tài)時(shí)已經(jīng)被初始化







          設(shè)定檢索策略的常用屬性


          屬性


          lazy


          類級(jí)別


          1.<class>元素中lazy屬性的可選值為:true(延遲檢索)和false(立即檢索)


          2.
          <class>
          元素中lazy屬性的默認(rèn)值為true


          一對(duì)多關(guān)聯(lián)級(jí)別


          1.<set>元素中lazy屬性的可選值為:true(延遲檢索)、false(立即檢索)和extra(增強(qiáng)延遲檢索)


          2.
          <set>
          元素中lazy屬性的默認(rèn)值為true


          多對(duì)一關(guān)聯(lián)級(jí)別


          1.<many-to-one>元素中的lazy屬性的可選值為:proxy(延遲檢索)、no-proxy(無代理延遲檢索)和false(立即檢索)


          2.<many-to-one>元素中的lazy屬性的默認(rèn)值為true


          --------------------------------------------


          屬性


          fetch


          類級(jí)別



          沒有此屬性


          一對(duì)多關(guān)聯(lián)級(jí)別



          1.<set>元素中fetch屬性的可選值為:select(查詢語句)、subselect(子查詢語句)和join(迫切左外連接檢索)


          2.
          <set>
          元素的fetch屬性的默認(rèn)值為select


          多對(duì)一關(guān)聯(lián)級(jí)別



          1.<many-to-one>元素中fetch屬性的可選值為:select(查詢語句)和join(迫切左外連接檢索)


          2.<many-to-one>元素的fetch屬性的默認(rèn)值為select



          HQL 聯(lián)接查詢


          內(nèi)聯(lián)接:inner
          join


          最典型、最常用的聯(lián)接查詢


          兩個(gè)表存在主外鍵關(guān)系時(shí)通常會(huì)使用內(nèi)聯(lián)接查詢



          外聯(lián)接

          左外聯(lián)接:left
          join

          left
          outer join

          右外聯(lián)接:right
          join
          right
          outer join

          完整外聯(lián)接:full
          join

          full
          outer join


          聯(lián)接類型
          HQL語法

          內(nèi)聯(lián)接
          inner
          join

          join

          迫切內(nèi)聯(lián)接 inner
          join fetch

          join
          fetch

          左外聯(lián)接 left
          outer join

          left
          join

          迫切左外聯(lián)接 left
          outer join fetch

          left
          join
          fetch

          右外聯(lián)接
          right
          outer join

          right
          join

          適用范圍

          適用于有關(guān)聯(lián)關(guān)系的持久化類,并且在映射文件中對(duì)這種關(guān)聯(lián)關(guān)系中作了映射


          Hibernate聯(lián)接語法如下


          from
          Entity
          inner
          join
          [fetch]
          Entity.property


          from
          Entity
          left
          join
          [fetch]
          Entity.property


          from
          Entity
          right
          join
          [fetch]
          Entity.property

          posted on 2012-04-22 15:52 hantai 閱讀(127) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 梓潼县| 垦利县| 资溪县| 大悟县| 美姑县| 河曲县| 武城县| 沙雅县| 永清县| 泊头市| 忻州市| 灌云县| 巴彦淖尔市| 沂南县| 莱芜市| 温州市| 海伦市| 大兴区| 凉山| 锦屏县| 浦城县| 多伦县| 鹤庆县| 宁都县| 肃宁县| 永顺县| 土默特右旗| 新昌县| 绿春县| 兴城市| 平武县| 洮南市| 曲阜市| 工布江达县| 改则县| 永德县| 宜兰市| 苏州市| 孟州市| 南安市| 新建县|