nhibernatesql語句
『壹』 Nhibernate和Hibernate有那些區別
NHibernate和Hibernate的主要區別在於它們的目標平台和運行環境。
首先,Hibernate是Java世界中最流行的ORM(對象關系映射)框架之一。它提供了一種機制,允許Java開發者將對象模型映射到關系型資料庫模型,從而簡化了資料庫訪問和操作的過程。Hibernate通過提供一系列的API和工具,使得開發者能夠以一種面向對象的方式來處理資料庫,而無需關心底層的sql語句和資料庫連接等細節。
相比之下,NHibernate是Hibernate的一個.NET版本,旨在為.NET開發者提供類似的功能和便利。NHibernate的設計和API與Hibernate非常相似,因此熟悉Hibernate的開發者可以很容易地遷移到NHibernate。NHibernate同樣提供了ORM功能,允許.NET開發者以面向對象的方式來訪問和操作資料庫。
除了目標平台和運行環境的不同之外,NHibernate和Hibernate在功能和使用上也存在一些細微的差異。例如,由於.NET和Java平台的差異,NHibernate在處理一些特定於.NET的功能和特性時,可能需要採用不同的方式或提供額外的支持。此外,由於NHibernate是在.NET平台上實現的,因此它可能會更好地集成和利用.NET平台的一些特性和優勢。
總的來說,NHibernate和Hibernate都是功能強大的ORM框架,它們的主要區別在於目標平台和運行環境。Hibernate主要針對Java平台,而NHibernate則針對.NET平台。盡管它們在功能和使用上存在一些細微的差異,但總體而言,它們的設計和API都非常相似,使得開發者可以在不同的平台上享受到類似的便利和優勢。
『貳』 在做asp.net網站時,使用NHibernate可是不顯示執行的sql語句,怎樣能查看到
調試的時候,看下面的輸出欄。
配置文件設置:
<property name="show_sql">true</property>
『叄』 sql語句什麼情況下使用N前綴
一開始就提到了與數據源無關的問題。當時只是從泛化的角度出發,利用ADO.net的DbProviderFactory根據不同的數據提供程序的名稱來實現一個與資料庫無關的數據訪問基類。但僅僅做到這一步還不能實現真正意義上的與數據源無關。 在程序的開發過程中,如果不考慮使用DbParameter的情況,絕大部分應用都可以用Transact-SQL來搞定,而不需要用到與具體數據源相關的特性。但是,現實總是比較殘酷的。DbParameter的應用也是如此廣泛,最容易想到的情況就是利用DbParameter來防止注入和用來處理一些不容易寫在SQL語句中的值。SQL語句中的參數名隨著數據提供程序的不同,也會不同,MS SQL Server用的是「@」,Oracle用的是「:」,到了OleDb基本清一色地改成了「?」。如果不解決這個問題,就沒法做到真正的與數據源無關。 如果用NHibernate,可以考慮HQL來解決此問題。HQL代替SQL再經過NHibernate的詞法分析器處理,轉換為SQL語句。如此一下,就不必考慮數據提供程序的參數前綴到底是啥了。可是本人始終不太喜歡NHibernate(從看到Hibernate時候開始),覺得配置文件太多了,而且體系又比較龐大,因此總尋思著怎麼幹些所謂的「重復造輪子」的事情。本人的想法很簡單,咱不發明新語言,只是簡單地針對那絕大部分的情況,將使用Transact-SQL的開發時,把語句中那些五花八門的參數名統一使用「@」,在執行的時候根據具體的數據提供程序進行替換。如此一來,既可以滿足與數據源無關的目標,又不需要費太多的力氣。 首先要考慮的問題是,如何獲取參數的前綴。可以用這個方式來獲取參數的前綴「DbConnection.GetSchema("DataSourceInformation").Rows[0]["ParameterMarkerFormat"]」。摘一段MSDN的說明:ParameterMarkerFormat表示如何格式化參數的格式化字元串。如果數據源不支持命名的參數,此字元串中的第一個佔位符應是格式化參數名的位置。例如,如果數據源期望使用『:』為前綴命名參數,此字元串將為「:{0}」。在使用參數名「p1」格式化此字元串時,生成的字元串為「:p1」。如果數據源期望參數以『@』為前綴,但是名稱中已包含該符號,此字元串將為『{0}』,格式化名為「@p1」的參數的結果將只是「@p1」。如果數據源不期望使用命名參數,而期望使用『?』字元,格式字元串可以只指定為『?』,這樣將忽略參數名。對於 OLE DB,將返回『?』。更詳細的信息可以參考MSDN中的「通用架構集合 (ADO.NET)」。按照之前的說法,有了參數前綴後,剩下的問題就是如何將SQL語句和DbParameter.ParameterName中的「@」替換掉。DbParameter.ParameterName比較簡單,直接String.Replace就OK,但是SQL語句中的情況比較復雜。「@」可能不僅僅出現在參數名中,也可能出現在字元里。簡單的Replace可能無法滿足要求。最初覺得比較好的做法有2種:正則表達式和詞法分析器。但後來考慮到,字元串中 「@」 出現的情況也相當難以預料且參數名比較特殊,為了支持一些特殊字元(比如:中文<總覺得有些人喜歡用>),再加上之前用Antlr2實現了一個基本的Select詞法分析器,所以就不考慮使用正則表達式,而是直接在之前的基礎上做了些簡化,生成了一個僅針對參數的詞法分析器。因為有Select語句詞法分析器的基礎,所以搞定參數的時候就簡單得多了。參數的規則可以定義為「@」+標識符,antlr2所需的主要規則2條:1、標識符:(('_' | 'a'..'z' | 'A'..'Z' | '\u2e81'..'\u2eca' |'\u3447'..'\u4dae' | '\u4e00'..'\u9fa5' | '\uf92c'..'\ufa29')+ ('0'..'9' | 'a'..'z' | 'A'..'Z' | '_' | '\u2e81'..'\u2eca' |'\u3447'..'\u4dae' | '\u4e00'..'\u9fa5' | '\uf92c'..'\ufa29')*) {$setType(Token.SKIP);}2、參數:('@' N_QUOTED_STRING)=>(('@' N_QUOTED_STRING) {_ttype=PARAMETER;}) | (('@' '@' N_QUOTED_STRING)=>('@' '@' N_QUOTED_STRING){_ttype=SYS_VAR;$setType(Token.SKIP);}) | (':' N_QUOTED_STRING)=>((':' N_QUOTED_STRING) {_ttype=PARAMETER;}) | '?'還必須注意的是,要替換的目標只是參數,所以沒有必要將其他如:保留字、字元串、數字、符號之類的東西取出來,通通加上「{$setType(Token.SKIP);}」跳過之。 利用詞法分析器對SQL語句進行解析,逐個替換掉原來SQL語句中的參數,最後得到的就是可以在目標數據源上執行的SQL語句。雖然有人會提出說,如果執行1000條SQL語句,那不是得執行1000此解析、替換,效率何存?但是,按照經驗來說,1次執行1000條SQL語句一般情況下只是參數的值不同,但SQL語句本身並不會有什麼差異;如果使用實體進行持久化,碰到這種情況的幾率更加減少。所以,本人認為,上述這種替換的做法還是可取的,特別是在某些情況下,一個應用程序運行在兩套不同的資料庫上時(連線時用伺服器數據Oracle,離線時暫時使用本地Access資料庫),這個做法就更能顯示出它的價值了。
『肆』 有了存儲過程,linq to sql還有必要用么
這兩者比較比較少
首先使用存儲過程就是一個有爭議的話題,愛使用存儲過程的程序員往往會把過多的業務邏輯封裝在存儲過程里,導致應用程序的可移植性比較差
而且一般會說使用存儲過程的性能比較高,但現在由於各種緩存技術的使用,減少頻繁的查詢資料庫已經是共識。
一般而言使用資料庫的存儲過程居多還是業務邏輯處理居多基本取決於公司的技術方向,我也見到不少公司是忽視軟體的開發,基本處理邏輯都是在資料庫中解決的。
至於linq to sql,說句老實話談不上是什麼特別好的技術,僅憑僅能使用sql server資料庫這一點,就已經限制了它的發展。看看現在多少公司還在用免費的mysql就知道了,更不要說還有那麼多的開源產品是建立在mysql之上。而同類的產品Nhibernate絕不會比它差。
『伍』 nhibernate 怎麼寫sql語句啊 急
nhibernate 怎麼寫sql語句啊 急
NHibernate 檢視生成的sql語句:
其實就是Interceptor的應用, 原始碼中Interceptor的預設實現是EmptyInterceptor,
[Serializable]
public class EmptyInterceptor : IInterceptor
{ 前面省略n行程式碼
public SqlString OnPrepareStatement(SqlString sql)
{
return sql;
}
} public class MyInterceptor : EmptyInterceptor
{
public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
return base.OnPrepareStatement(sql);
}
} 我們要做的就是繼承EmptyInterceptor,重寫OnPrepareStatement()方法,重寫方法裡面就是你大展拳腳的地方了,
想寫檔案寫檔案,想輸出到頁面就輸出到頁面,什麼都不做都可以,如上
怎麼用呢?
public override void Update(Admin entity)
{
ISession session = HibernateTemplate.SessionFactory.OpenSession(new MyIntercepotr);
session.Update(entity);
session.Flush();
}
在你想要檢視的操作中,開啟session 的時候新增上自定義的攔截器就可以了,想給所有的操作都配置的話就要用到全域性配置檔案了。
重寫OnPrepareStatement()的時候一句話都不改,我只是在這里打一個斷點而已,只要看看生成的sql語句就行了,然後去修改配置檔案再來debug,確認怎麼配置生產的sql最優。
用LinqPad檢視Nhibernate生成的sql語句
使用Nhibernate開發一般都要對Nhibernate生成的sql語句進行檢視及分析,檢視Nhibernate生成的sql語句,可以使用NHProfiler和log4。但NHProfiler是要付費的(當然,在天朝,你懂的……),用log4配置比較麻煩。今天在網上檢視Linq to Nhibernate資料的時候發現了一個工具LinqPad,於是又找了相關資源,發現它還真能實現Nhibenate語句的檢視。廢話少說,看下面的使用方法吧!
1、 下載LinqPad,地址::linqpad./
2、 配置LinqPad,執行LinqPad,在選單里選擇Query—>Query Propeties;在選項卡中Additional References,點選「Browse…」按鈕,選擇專案中必要的Dll。
Dll包括:資料庫驅動dll,實體對映dll(圖中的Entity),nhibernate相關的dll
如何播放藍光碟?急!
要藍光播放器啊
tmt
powerdvd
aurora blu-ray player
隨便弄個破解的就成
你要是不切換字幕音訊啥的,就BDMV 檔案里邊,找最大的.m2ts 的檔案
急,女朋友讓猜迷語呢!!
名字,結婚後,女人是不會用男人的名字的,也不對。
只有男人的姓氏,才是正確答案,理由如下:
1、東方女人在結婚後,人會稱其「某太太」,這個「某」就是老公的姓氏。
西方女人在結婚後,就會將姓改為和老公一樣。
2、長度上,東方的姓氏通常只有一個字,而西方姓氏卻是一串字母,比東方的長。
3、男人當和尚後,只有法號,沒有姓名,所以不用。
小金毛拉肚子··急
是吃撐的拉肚子就給他吃些健胃消食的葯
要是吃壞肚子了就給它喝一支慶大黴素的注射液
關於基金定投---急!
用身份證登陸登陸你買的基金的基金公司網站
密碼是你的身份證後6位數字。。
登陸進去後,就可以查到您所想知道的資訊了!
還有一種方式是你去銀行櫃台列印基金對賬單,上面也會有你想知道的資訊!
急!化學,SO2的制備
應該該不會產生H2,可以用排NaOH溶液的方法收集,再點燃收集到的氣體看看是不是H2。但估計正常情況下,收集不到氣體。
寫一個小片段~~~急
今天舉行同事聚餐,公司幾個美女打扮的千姿百態,在這個風和日麗的天氣里,一起去「全聚德」烤鴨店撮了一頓,大家都對那烤鴨贊不絕口,一邊津津有味的吃,一邊興致勃勃的侃大山,公司的美女真是多,鶯鶯燕燕坐滿一屋芳菲,真是百花盛開呀!
數學題,求解答,急啊
我敢打賭 你上課沒認真聽
4:sin(2x+π/2)=cos2x,這是三角函式的誘導公式 書上有 y=cos2x是偶函式 這種東西你畫個圖就容易理解了!
5:設a=(i,j) b=(x,y) 若ab, i/x=j/y
6:a·b=|a|*|b|cos<a,b> 這是公式 推導過程 自己看書
7:橫座標伸長2倍 就是擴大2倍 那麼就是用1/2x替換以前的x 就行了!這個還是要根據自己畫圖來理解!
8:[π/2,π]之間 就確定了cosΘ的正負 在[π/2,π]之間 cosΘ為負數,至於你後面那個式子
是根據二倍角公式 推導而來的
這是二倍角公式的其中一個
cos2α=cos²α-sin²α
=1-2sin²α
=2cos²α-1
上式中 可以找到你要的依據!
不過你字還算可以!
usewildcards是什麼意思,急!
Use Wildcards
使用萬用字元;
Use Wildcards
使用萬用字元;
Use Wildcards
使用萬用字元;
布滿造句長一點,急!
因為要搶救傷員,軍醫在手術室里忙了幾天幾夜,眼睛布滿了血絲,讓人既心疼又感動。
滿意請採納!謝謝!