<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 66,  comments - 11,  trackbacks - 0

        Criteria提供了符合面向對象編程風格的查詢封裝模式。不過HQL提供了更加豐富靈活的特性,它在涵蓋了Criteria功能范圍的前提下,提供了更為強大的查詢能力。HQL基于SQL,同時提供了更加面向對象的封裝。
        實體查詢:HQL子句本身大小寫無關,但是其中出現的類名和屬性名必須注意大小寫區分。需要注意的是,Hibernate中,查詢的目標實體存在著繼承關系的判定,如"from TUser"將返回所有TUser以及TUser子類的記錄,我們知道,Java中所有類的根類都是java.lang.Object,那么,如下HQL將返回數據庫中所有庫表的記錄:"from java.lang.Object",在where子句中,我們可以通過比較操作符指定條件,=,<>,>,>,<=,>=,between,notbetween,in,not in,is,like等。與SQL相同,我們可以通過and,or等邏輯連接符組合各個邏輯表達式。

        屬性查詢:有時我們并不需要獲取完整的實體對象,只需要現實部分列,通過HQL也可以做到這點,如:"select user.name,user.age form TUser user"表明我們需要讀取name和age屬性的內容,而此時,返回的list數據結構中,每個條目都是一個對象數組(Object[]),其中一次包含了我們所獲取的屬性數據。
        如果覺得返回數組的方式不夠符合面向對象的風格,我們可以通過在HQL中動態構造對象實例的方法對這些平面化的數據進行封裝。"select new TUser(user.name,user.age) from TUser user",我們通過HQL獲取數據的部分屬性值,與此同時,我們也可以在HQL的select字句中使用統計函數,甚至原生SQL函數,或者利用distinct關鍵字,剔除返回集中的重復記錄。

        實體更新與刪除:在Hibernate2中,HQL僅僅用于數據查詢,而在Hibernate3中,HQL具備了更加強大的功能。實體更新與刪除就是其中的主要特征之一。

        分組和排序:與SQL類似,HQL通過order by子句實現對查詢結果的排序,order by子句可以指定多個排序條件:"from TUser user order by user.name ,user.age desc"通過Group by子句可進行分組統計。如:"select count(user),user.age from TUser user group by user.age",我們知道where子句可以對記錄進行甄選。那么,對于Group by子句獲得的結果集我們可以通過Having子句進行甄選。例如:"select count(user),user.age from TUser user gourp by user.age having count(user)>10".

         參數綁定:類似JDBC中的SQL操作,我們可以通過順序占位符"?"對參數進行標識,并在之后對參數內容進行填充。建議使用Query接口"from TUser user where user.name=? and user.age>?",這里除了順序占位符,我們還可以使用引用占位符,如:"from TUser where name=:name"參數綁定機制可以使得查詢語法與具體參數數值相互獨立。這樣,對于參數不同,查詢語法相同的查詢操作,數據庫即可實施性能優化策略。同時,參數綁定機制也杜絕了參數值對查詢語法本身的影響。

         引用查詢:SQL語句混雜在代碼之間將破壞代碼的可讀性,并使得系統的可維護性降低。為了避免這樣的情況出現,我們通常采取將SQL配置化的方式,也就是將SQL保存在配置文件中,需要調用的時候在進行讀取。
    <query name="queryByName">
     <![CDATA[
      from TUser user where user.name=:name
     ]]>
    </query>
    之后,我們可通過session.getNamedQuery方法從配置文件中調用引用的HQL.

         聯合查詢:inner join,left outer join,right outer join,full join
         子查詢:如:"from TUser user where (select count(*) from user.addresses)>1"HQL中,子查詢必須出現在where子句中,且必須以一對圓括號包圍。
         數據加載方式:Hibernate支持以下幾種數據加載方式:
    1、即時加載:當實體加載完畢后,立即加載其關聯數據。
    2、延遲加載:實體加載時,其關聯數據并非即刻獲取,而是當關聯數據第一次被訪問時再進行讀取。
    3、預先加載:預先加載時,實體及其關聯對象同時讀取,這與即時加載類似。
    4、批量加載:對于即時加載和延遲加載,可以采用批量加載方式進行性能上的優化。

    posted on 2009-11-15 22:25 王永慶 閱讀(319) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
    <2009年11月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一级女人18片毛片免费视频| 亚洲AV成人噜噜无码网站| 美女一级毛片免费观看| 午夜视频在线在免费| 亚洲一线产品二线产品| 欧美男同gv免费网站观看| 亚洲综合偷自成人网第页色| 中文字幕无码成人免费视频| 亚洲乱码无人区卡1卡2卡3| 免费看片A级毛片免费看| 亚洲av无码专区首页| 又色又污又黄无遮挡的免费视| 免费在线观看自拍性爱视频| 亚洲一区二区三区在线播放| 久久免费国产精品| 亚洲狠狠综合久久| 亚洲高清中文字幕免费| 欧美亚洲国产SUV| 亚洲综合色视频在线观看| 亚洲免费人成在线视频观看 | 亚洲乱码一二三四区国产| 免费国产作爱视频网站| 亚洲欧美日韩中文二区| 亚洲国产人成中文幕一级二级| 香蕉免费一级视频在线观看| 亚洲综合网站色欲色欲| 亚洲AV无码成人精品区日韩 | 国产亚洲福利一区二区免费看| 亚洲视频人成在线播放| 久久国产精品成人免费 | 亚洲GV天堂无码男同在线观看| 免费a级毛片无码av| 99在线免费视频| 亚洲三级在线视频| 免费人成网站在线高清| 无码日韩精品一区二区三区免费 | 亚洲色大18成人网站WWW在线播放| 日韩免费a级在线观看| 日本道免费精品一区二区| 亚洲国产精品免费在线观看| 免费午夜爽爽爽WWW视频十八禁|