當前位置:首頁 » 編程語言 » nhibernate輸出sql語句
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

nhibernate輸出sql語句

發布時間: 2022-07-18 10:08:24

『壹』 請問如何將這條sql左外連接查詢的語句轉換為Nhibernate的HQL語句

select
TB_ITEM_DEPLOY.F_ITEM_CODE AS F_ITEM_CODE,
TB_ITEM_DEPLOY.F_MEDIA_CODE1 AS F_MEDIA_CODE1,
TB_ITEM_DEPLOY.F_ITEM_NAME AS F_ITEM_NAME,
TB_ITEM_DEPLOY.F_AUTO_ID AS F_AUTO_ID,
TB_ITEM_DEPLOY.F_ORDER AS F_ORDER,

TB_ITEM_INFO.F_POINT_CODE AS F_POINT_CODE,
TB_ITEM_INFO.F_CODE1 AS F_CODE1,
TB_ITEM_INFO.F_CODE2 AS F_CODE2,
TB_ITEM_INFO.F_DEPT_CODE AS F_DEPT_CODE,
TB_ITEM_INFO.F_POSITION AS F_POSITION,
TB_ITEM_INFO.F_FLAG AS F_FLAG

FROM
TB_ITEM_DEPLOY LEFT OUTER JOIN TB_ITEM_INFO

ON
(TB_ITEM_DEPLOY.F_ITEM_CODE = TB_ITEM_INFO.F_ITEM_CODE) and (TB_ITEM_INFO.F_POINT_CODE = '444444')
WHERE
(TB_ITEM_DEPLOY.F_MEDIA_CODE1 = '11')

首線告訴你 你現在寫的是完全連接 JOIN ON
左連接的寫法是 LEFT JOIN ON
右連接的寫法使 RIGHT JOIN ON
換到 你的 SQL 中就是

select
TB_ITEM_DEPLOY.F_ITEM_CODE AS F_ITEM_CODE,
TB_ITEM_DEPLOY.F_MEDIA_CODE1 AS F_MEDIA_CODE1,
TB_ITEM_DEPLOY.F_ITEM_NAME AS F_ITEM_NAME,
TB_ITEM_DEPLOY.F_AUTO_ID AS F_AUTO_ID,
TB_ITEM_DEPLOY.F_ORDER AS F_ORDER,

TB_ITEM_INFO.F_POINT_CODE AS F_POINT_CODE,
TB_ITEM_INFO.F_CODE1 AS F_CODE1,
TB_ITEM_INFO.F_CODE2 AS F_CODE2,
TB_ITEM_INFO.F_DEPT_CODE AS F_DEPT_CODE,
TB_ITEM_INFO.F_POSITION AS F_POSITION,
TB_ITEM_INFO.F_FLAG AS F_FLAG

FROM
TB_ITEM_DEPLOY LEFT OUTER LEFT JOIN TB_ITEM_INFO

ON
(TB_ITEM_DEPLOY.F_ITEM_CODE = TB_ITEM_INFO.F_ITEM_CODE) and (TB_ITEM_INFO.F_POINT_CODE = '444444')
WHERE
(TB_ITEM_DEPLOY.F_MEDIA_CODE1 = '11')

明白

還有一種寫法為

select
TB_ITEM_DEPLOY.F_ITEM_CODE AS F_ITEM_CODE,
TB_ITEM_DEPLOY.F_MEDIA_CODE1 AS F_MEDIA_CODE1,
TB_ITEM_DEPLOY.F_ITEM_NAME AS F_ITEM_NAME,
TB_ITEM_DEPLOY.F_AUTO_ID AS F_AUTO_ID,
TB_ITEM_DEPLOY.F_ORDER AS F_ORDER,

TB_ITEM_INFO.F_POINT_CODE AS F_POINT_CODE,
TB_ITEM_INFO.F_CODE1 AS F_CODE1,
TB_ITEM_INFO.F_CODE2 AS F_CODE2,
TB_ITEM_INFO.F_DEPT_CODE AS F_DEPT_CODE,
TB_ITEM_INFO.F_POSITION AS F_POSITION,
TB_ITEM_INFO.F_FLAG AS F_FLAG

FROM
TB_ITEM_DEPLOY A ,
TB_ITEM_INFO B

WHERE
(TB_ITEM_DEPLOY.F_MEDIA_CODE1 = '11')
AND TB_ITEM_INFO.F_POINT_CODE = '444444'(+)

明白?

來源信息:飯客網路

『貳』 在配置hibernate中見到一條sql這樣的命令,求解析,謝謝

這種sq是HQL語句,是用對象來表示表,用對象的屬性來表示表中的欄位,來進行查詢的。
一般這個對象是根據表來創建的,對象的屬性和表的欄位是一一對應的。
就如from Subject as sub where sub.subjectTitle=?,表示從對象Subject所對應的表中,查詢該表中對象Subject 的屬性subjectTitle所對應的欄位,欄位的值為?,也就是你要傳進來的參數。假設,對象Subject 對應的表為subject,屬性對應的欄位為subjectTitle,則上面那個HQL可以寫成SQL語句:select * from subject as sub where sub.subjectTitle=?

『叄』 C#中NHibernate 映射SQL時 怎麼樣做到只映射出部分欄位

這個不叫映射好吧!!你說的這個只是一個在一個XML文件中寫sql語句的地方而已,
可以sql語句,也可以是存儲過程的名字,執行的時候對應的去執行就是了撒!!

『肆』 關於Nhibernate項目換資料庫時,以前的SQL語句問題

不是很理解,你既然用了hibernate那換資料庫和查詢語句應該是沒有關系的,只要更改資料庫驅動就可以了,而且不用list的話,返回是一個數據集改如何處理?除非你返回一定是一個對象,那可以強制轉換,用toObject方法來做

『伍』 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和log4net。但NHProfiler是要付費的(當然,在天朝,你懂的……),用log4net配置比較麻煩。今天在網上查看Linq to Nhibernate資料的時候發現了一個工具LinqPad,於是又找了相關資源,發現它還真能實現Nhibenate語句的查看。廢話少說,看下面的使用方法吧!
1、 下載LinqPad,地址:http://www.linqpad.net/
2、 配置LinqPad,運行LinqPad,在菜單里選擇Query—>Query Propeties;在選項卡中Additional References,點擊「Browse…」按鈕,選擇項目中必要的Dll。
Dll包括:資料庫驅動dll,實體映射dll(圖中的Entity),nhibernate相關的dll

『陸』 NHibernate

sqlconnecsting cn=new sqlconnecstring("連接資料庫語句就不寫了");
sqlcommand cmd=new sqlcommand();
com.connecsting=cn;
cn.open();
cmd.commandtext="你要執行的任何SQL語句";//建立臨時表,修改刪除表,附加資料庫,建立模式數據表都可以,查詢等都可以在這執行
cmd.executenonquery();
cn.colse();

『柒』 NHibernate是什麼

NHibernate 是一個基於.Net 的針對關系型資料庫的對象持久化類庫。Nhibernate 來源於非常優秀的基於Java的Hibernate 關系型持久化工具。

NHibernate 從資料庫底層來持久化你的.Net 對象到關系型資料庫。NHibernate 為你處理這些,遠勝於你不得不寫SQL去從資料庫存取對象。你的代碼僅僅和對象關聯,NHibernat 自動產生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和log4net。但NHProfiler是要付費的(當然,在天朝,你懂的……),用log4net配置比較麻煩。今天在網上查看Linq to Nhibernate資料的時候發現了一個工具LinqPad,於是又找了相關資源,發現它還真能實現Nhibenate語句的查看。廢話少說,看下面的使用方法吧!
1、 下載LinqPad,地址:http://www.linqpad.net/
2、 配置LinqPad,運行LinqPad,在菜單里選擇Query—>Query Propeties;在選項卡中Additional References,點擊「Browse…」按鈕,選擇項目中必要的Dll。
Dll包括:資料庫驅動dll,實體映射dll(圖中的Entity),nhibernate相關的dll

『玖』 在C#中,用NHibernate對系統進行優化有哪些方式

最好是參考下官方文檔,不然研究起來有可能走進一個誤區。
其實也沒有什麼新鮮的東西,簡單的項目沒必要使用它。因為都是基於ADO.NET的。把ADO.NET學好,那自然就是水到渠成的事情了。

NHibernate是一個基於.Net,用於關系資料庫的對象持久化類庫.它是著名的Hibernate的.Net版本.
NHibernate用於把你的.Net對象持久化到底層的關系資料庫中.你完全不用自己編寫Sql語句去操作這些對象,NH會代替你做.你的代碼裡面只需要關心這些對象,NH生成sql語句並能為你取到正確的東西.
開發過程
HNibernate將會有一些工具幫助你,如:生成schema,根據映射文件(Mapping file)生成類,並更新schema(一個新開發者的建議).然而,在本文檔中,前提是你已經手動的資料庫的創建喝.Net類的編寫...
這里是我們要做的:

1. 在資料庫中創建把.Net類持久化的對應表.
2. 創建需要被持久化的.Net類.
3. 創建映射文件,以告訴NH怎樣持久化這些類的屬性.
4. 創建NH的配置文件,以告訴NH怎樣連接資料庫.
5. 使用NH提供的API.

步驟1:創建資料庫表
步驟2:創建.Net類
步驟3:編寫映射文件(Mapping File)
步驟4:創建資料庫配置文件