Hibernate 命名查詢執行複雜查詢

來源:互聯網
上載者:User

Hibernate允許在對應檔中定義字串形式的查詢語句,這種查詢方式成為命名查詢
HQL混雜在代碼之間,破壞代碼可讀性,在使用JDBC時使將sql配置在檔案中,sql配置化調用時讀取。

對應檔配置   <query>元素用於定一個HQL查詢語句,和<class>元素並列

    </class>    <query name="queryname">    <![CDATA[    HQL   or    SQL    ]]>    </query>


命名查詢  命名查詢可以使HQL查詢語句,也可以使本地SQL查詢語句,並且可通過封裝傳回型別執行複雜查詢
query.setProperties(bean)  將bean對象值匹配到明明參數,但是要求具名引數名稱必須要與實體物件響應的屬性同名

執行navicatSQL並擷取結果  HQL不能涵蓋所有查詢特性,本地sql查詢提供了內建的支援

使用SQLQuery   本地sql查詢的執行控制通過SQLQuery介面完成,通過執行session.CreateSQLQuery擷取SQLQuery介面的對象
標量查詢:最基本的本地sql查詢,獲得一個數值的列表
實體查詢:通過addEntity方法讓本地sql查詢返回實體物件
返回多個實體:本地sql查詢返回多個實體物件
參數幫頂:本地sql查詢支援位置參數和具名引數

語句:
為了把sql語句查詢返回的資料對應到對象,因此需要在sql語句中為實體設定別名,下面,我指定名字為l,用{}表示引用實體的屬性。注意:使用SQLQuery傳入查詢的實體類,addEntity將別名與實體類關聯在一起。

String sql = select {l.*} from login l where l. username='馬達';SQLQuery query = session.createSQLQuery(sql).addEntity("l",Login.Class);


本地sql命名化查詢
設定檔中定義查詢的名字,就可以像調用一個命名的HQL查詢一樣直接調用命名sql查詢
<sql-query> 
定一個一個sql查詢
<return>
定義關聯返回的結果和持久化類
<return-join>
串連查詢
<load-collection>
將查詢定義為預先初始化各個集合
<return-scalar>
指定欄位的別名和Hibernate類型
<return-property>
明確的告訴Hibernate使用那些欄位別名

例如。上面的就應該是:

<sql-query name="sqlqueryname">    <![CDATA[    SQL    ]]>    <return alias="l" class="entity.Login"></return></sql-query>


定製sql   Hibernate3可以使用定製的sql執行create,update和delete操作,在Hibernate中,持久化類和集合已經包含了一套配置產生的語句(insertsql,deletesql,updatesql)使用<sql-insert> <sql-delete>和<sql-update>重載這些語句
在EntityName.hbm.xml中配置
注意:sql直接在資料庫裡執行,所以可以自由使用任意文法,但資料庫特定的文法會降低映射的可移植性
①便攜insert和update中定義的欄位必須和對應檔生命的屬性相對應,一個都不可少
②在insert和update中,屬性出現的數序必須和對應檔中生命的順序一致
③insert主鍵總是在最後



總結調用本地SQL三種方式:
①SQLQuery執行SQL
②使用命名sql
③使用定製sql

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.