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