NHibernate输出SQL语句

  用了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());

  效果如下:

  

  参考:http://www.mashangpiao.net/Article/Content/53

时间: 2024-10-10 16:19:44

NHibernate输出SQL语句的相关文章

[NHIbernate]利用LINQPad查看NHibernate生成SQL语句

上篇文章中我们提到可以通过重写NHibernate的 EmptyInterceptor 拦截器来监控NHibernate发送给数据库的SQL脚本,今天看到有朋友用LINQPad工具来进行NHibernate生成的SQL语句监控,试了下感觉更直观了.当然这不是LINQPad的主要功能,但我们可以通过这种方法来达到我们的目的. 接下来,我们看一下如何使用LINQPad来查看NHibernate发送给数据库的SQL. 1.按F4进入Query Properties,或者Query->Query Pro

在plsql中输出SQL语句

如何在plsql中快速输出一行语句甚至是一个sql脚本,比如你在页面输入se  然后快速得到select  *  from (1)在plsql中,鼠标单击上面的[工具]选项,在下拉框中选择[首选项] (2)然后进入到首选项的对话框里面,在左边的[用户界面]下单击[编辑器]选项,如图就会在右侧出现可编辑的对话框,然后把滚动条往下拉,就能看到[自动替换]的选项卡 (4)在[自动替换]里,点击[编辑]后,会弹出一个[自动替换定义]可编辑的选项框,在里面填写你要设置的sql,例如: se = selec

使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句

重建包名 org.hibernate.type.descriptor.sql 重建类BasicBinder 代码如下 package org.hibernate.type.descriptor.sql; import java.sql.PreparedStatement; import java.sql.SQLException; import org.hibernate.internal.CoreLogging; import org.hibernate.type.descriptor.Jdb

phpcms V9 改造:输出sql语句

1.修改数据库驱动phpcms/libs/classes/mysql.class.php 添加以下代码:/*** 最近一次查询语句*/private $lastquerysql = '';public function lastsql() {        return $this->lastquerysql;} 修改execute方法,在$this->lastqueryid = mysql_query($sql, $this->link) or $this->halt(mysql

ssm操作控制台输出sql语句 log4j.properties

# Configures Log4j for Tomcat and Sakai # use "A" for log in with catalina.out (actually standard output) log4j.rootLogger=WARN, Sakai # Configuration for standard output ("catalina.out" in Tomcat). log4j.appender.Sakai=org.apache.log4

linq to sql 和 entity framework 输出sql语句

linq to sql: dbcontext.Log 属性,是一个textwriter entity framework: 1 dbcontext.Database.Log, 是一个Action<string>, eg. console.write(string) 2 after 6.1, 也可以设置 interceptor

linq to sql 输出SQL语句

DataClassesDataContext db = new DataClassesDataContext(); db.Log=Response.Output; var result = from de in db.Department where de.DepartmentParentID == 9 select de; GridView1.DataSource = result; GridView1.DataBind();

mybatis 3.2.8 + log4j2.0.2 控制台输出sql语句

mybatis3.2.7有一个bug,使用log4j2 (2.0.2)版本时,会找不到类 ,导致启动失败,详见 https://github.com/mybatis/mybatis-3/issues/235 但没过多久 , 3.2.8就已经修复了这个bug , 最新的mybatis3.2.8下载地址为: https://github.com/mybatis/mybatis-3/releases mybatis 3.2.8 整合 log4j2.0.2并不复杂 , 如果用spring-mvc做为we

mybatis输出sql语句

方法一: 这种方法是mybatis官网上介绍的,比较好用: log4j.properties: log4j.rootLogger=ERROR,consolelog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%-5p] %d