NHibernate 查看產生的sql語句

來源:互聯網
上載者:User

今天比較鬱悶,想修改下NHibernate設定檔以最佳化下效能,於是想跟蹤下各個操作下產生的產生的 sql       
唉,我這麼懶的人首先想到的就是在網上找下已有的方法,結果讓人失望的很啊。網上能給出答案的還真沒被我看到,
都是些沒思考過就亂回答的人,什麼show_sql=“true”,我靠,這隻能從控制台看到撒,嗎的,現在還有幾個應用是
控制台應用啊?  
於是就只能自己找方法了,終於,在我翻閱NHibernate 2.0還是2.1的原始碼的時候讓我找到了NHibernate對外的介面了
淚奔啊,記錄下來,與大家分享。其實就是Interceptor的應用,  源碼中Interceptor的預設實現是EmptyInterceptor,下面列出
該實現中我說的介面:
view source
print?
01             [Serializable]
02    public class EmptyInterceptor : IInterceptor
03    {
04     
05        //前面省略n行代碼
06        public SqlString OnPrepareStatement(SqlString sql)
07        {
08            return sql;
09        }
10    }
view source
print?
1    public class MyInterceptor : EmptyInterceptor
2       {
3          public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
4           {
5               return base.OnPrepareStatement(sql);
6           }
7       }

我們要做的就是繼承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最優,^_^.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.