用了NHierbate之后,很少需要寫原生的SQL語句,由於總是看不到SQL語句,所以有時候對SQL調優非常不利。因此產生了讓NHibernate輸出它所生成的SQL語句的想法,以便於后續調優。
一、在控制台輸出SQL語句
在控制台程序中,要查看NHibernate所生成的SQL語句,方法非常簡單,只需要改下配置文件就OK了。
<property name="show_sql">true</property> <property name="format_sql">true</property>
第一個參數用於配置是否輸出SQL語句到控制台。
第二個參數用於輸出的SQL語句是否格式化以便於查看。
只設置第一個與兩個都設置的差別如下:
只顯示不格式化:
格式化后:
上面的方法是配置控制台顯示的,如果不在控制台里執行,是Web程序呢。
二、Web程序輸出SQL語句到“調試窗口”
Web程序輸出的方式也不難。
第一步:寫一個類,繼承自EmptyInterceptor並重寫OnPrepareStatement方法。
public class SQLWatcher : EmptyInterceptor { public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql) { System.Diagnostics.Debug.WriteLine("sql語句:" + sql); return base.OnPrepareStatement(sql); } }
第二步:在創建OpenSession的時候,用此類的對象作為參數傳入
ISession session = sessionFactory.OpenSession(new SQLWatcher());
效果如下: