NHibernate 查看生成的sql语句

  今天比较郁闷,想修改下NHibernate配置文件以优化下性能,于是想跟踪下各个操作下产生的生成的sql      
唉,我这么懒的人首先想到的就是在网上找下已有的方法,结果让人失望的很啊。网上能给出答案的还真没被我看到,
都是些没思考过就乱回答的人,什么show_sql=“true”,我靠,这只能从控制台看到撒,吗的,现在还有几个应用是
控制台应用啊?  
  于是就只能自己找方法了,终于,在我翻阅NHibernate 2.0还是2.1的源代码的时候让我找到了NHibernate对外的接口了
泪奔啊,记录下来,与大家分享。其实就是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()方法,重写方法里面就是你大展拳脚的地方了,
想写文件写文件,想输出到页面就输出到页面,什么都不做都可以,如上

 

怎么用呢?

 

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
public override void Update(Admin entity)
{
ISession session
= HibernateTemplate.SessionFactory.OpenSession( new MyIntercepotr);
session.Update(entity);
session.Flush();
}

在你想要查看的操作中,打开session 的时候添加上自定义的拦截器就可以了,想给所有的操作都配置的话就要用到全局配置文件了。
不过我一般都不会用。
      我这么懒的人什么都不做的,重写OnPrepareStatement()的时候一句话都不改,我只是在这里打一个断点而已,我只要看看生成的
sql语句就行了,然后去修改配置文件再来debug,确认怎么配置生产的sql最优,^_^.


 

转载于:https://www.cnblogs.com/wangchangming/archive/2010/08/19/NHibernare_sql.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值