Nhibernate查詢語句

2021-09-08 09:15:52 字數 2840 閱讀 4756

本節內容

nhibernate中的查詢方法

nhibernate查詢語言(hql)

1.from子句

2.select子句

3.where子句

4.order by子句

5.group by子句

例項分析

結語nhibernate中的查詢方法

在nhibernate中提供了三種查詢方式給我們選擇:nhibernate查詢語言(hql,nhibernate query language)、條件查詢(criteria api,query by example(qbe)是criteria api的一種特殊情況)、原生sql(literal sql,t-sql、pl/sql)。每個人有不同的喜好和特長,可以根據自己的情況選擇使用其中的一種或幾種。這一節我們介紹nhibernate查詢語言(hql,nhibernate query language)。

nhibernate查詢語言(hql)

顧名思義,同sql語句類似:

1.簡單用法:返回表中所有資料。

public ilistfrom()

2.使用別名:使用as來賦予表的別名,as可以省略。

public ilistfromalias()

3.笛卡爾積:出現多個類,或者分別使用別名,返回笛卡爾積或者稱為「交叉」連線。

2.select子句

1.簡單用法:在結果集中返回指定的物件和屬性。

public ilistselect()

2.陣列:用object的陣列返回多個物件和/或多個屬性,或者使用特殊的elements功能,注意一般要結合group by使用。

public ilistselectobject()

或者使用型別安全的.net物件,以後在例項中說明。

3.統計函式:用object的陣列返回屬性的統計函式的結果,注意統計函式的變數也可以是集合count( elements(c.customerid) )

public ilistaggregatefunction()

4.distinct用法:distinct和all關鍵字的用法和語義與sql相同。例項:獲取不同customer的firstname。

public ilistdistinct()

3.where子句

where子句讓你縮小你要返回的例項的列表範圍。

public ilistwhere()

where子句允許出現的表示式包括了在sql中的大多數情況:

數學操作符:+, -, *, / 

真假比較操作符:=, >=, <=, <>, !=, like 

邏輯操作符:and, or, not 

字串連線操作符:||  

sql標量函式:upper(),lower() 

沒有字首的( ):表示分組 

in, between, is null 

位置引數:? 

命名引數::name, :start_date, :x1 

sql文字:'foo', 69, '1970-01-01 10:00:01.0' 

列舉值或常量:color.tabby  

4.order by子句

按照任何返回的類或者元件的屬性排序:asc公升序、desc降序。

public ilistorderby()

5.group by子句

按照任何返回的類或者元件的屬性進行分組。

public ilistgroupby()

例項分析

public ilistgetcustomersbyfirstname(string firstname)

書寫hql引數有四種寫法:

寫法1:可能會引起sql注入,不要使用。 

寫法2:ado.net風格的?引數,nhibernate的引數從0開始計數。 

寫法3:命名引數用:name的形式在查詢字串中表示,這時iquery介面把實際引數繫結到命名引數。 

寫法4:命名的引數列表,把一些引數新增到乙個集合列表中的形式,比如可以查詢資料是否在這個集合列表中。 

使用命名引數有一些好處:命名引數不依賴於它們在查詢字串**現的順序;在同乙個查詢中可以使用多次;它們的可讀性好。所以在書寫hql使用引數的時候推薦命名型引數形式。

測試一下這個方法吧:看看資料庫中firstname為「yjinglee」的記錄個數是否是1條,並可以判斷查詢出來的資料的firstname屬性是不是「yjinglee」。

[test]

public void getcustomerbyfirstnametest()

}

例項2:獲取顧客id大於customerid的顧客:

public ilistgetcustomerswithcustomeridgreaterthan(int customerid)

nhibernate動態查詢

icriteria icriteria sessionfactory.getcurrentsession createcriteria typeof cardtype if cardtype.cardtypeid null if cardtype.cardtypeid null if cardtyp...

NHibernate輸出SQL語句

用了nhierbate之後,很少需要寫原生的sql語句,由於總是看不到sql語句,所以有時候對sql調優非常不利。因此產生了讓nhibernate輸出它所生成的sql語句的想法,以便於後續調優。在控制台程式中,要檢視nhibernate所生成的sql語句,方法非常簡單,只需要改下配置檔案就ok了。p...

NHibernate查詢優化的相關資料

一.1.立即載入 lazy false 並不能在所有情況下都會減少sql語句,同時還會帶來過量讀取資料的嚴重後果 由上面的分析可知,關聯實體和集合最好保持預設的延遲載入,所以我在實際的開發中是不進行任何lazy false設定的。如果要同時載入關聯實體或集合,最有效的方法就是編寫join和 dyna...