<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="show_sql">true</property>
<property name="adonet.batch_size">0</property>
<mapping assembly="HibernateService"/>

要加上<property name="adonet.batch_size">0</property> 才能正常输出sql

NHibernate: UPDATE Product SET Name = @p0, Category = @p1, Discontinued = @p2 WHERE Id = @p3;@p0 = 'Apple 更新 ' [Type: String (4000)], @p1 = 'Fruits' [Type: String (4000)], @p2 = False [Type: Boolean (0)], @p3 = 1adf041b-9b5c-4dfe-b73d-06b3e076151d [Type: Guid (0)]

adonet.batch_size 指定用ADO.Net的批量更新的数量,默认设置为0(不启用该功能)。

如果是查询 不加 adonet.batch_size 能否输出sql呢?ok没有问题。

NHibernate: SELECT product0_.Id as Id0_0_, product0_.Name as Name0_0_, product0_.Category as Category0_0_, product0_.Discontinued as Disconti4_0_0_ FROM Product product0_ WHERE product0_.Id=@p0;@p0 = 1adf041b-9b5c-4dfe-b73d-06b3e076151d [Type: Guid (0)]

补一个hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="HibernateService">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">data source=***,1111;database=**;uid=**;pwd=**;</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="show_sql">true</property>
<property name="adonet.batch_size">0</property> <!--该选项 DQL不需要 DML需要-->
<property name="command_timeout">60</property>
<mapping assembly="HibernateService"/>
</session-factory>
</hibernate-configuration>

NHibernate提供ADO.NET连接配置

属性名

用途

connection.provider_class

实现IConnectionProvider接口的类型。

例如: (如果是NHibernate内部的IConnectionProvider实现类)full.classname.of.ConnectionProvider,

(如果是自定义的NHibernate外部的IConnectionProvider实现类 )full.classname.of.ConnectionProvider, assembly。

connection.driver_class

如果使用DriverConnectionProvider,实现IDriver接口的类型。

(如果是NHibernate内部的实现的IDriver类型)full.classname.of.Driver

(如果是自定义的NHibernate外部的IDriver实现类 )full.classname.of.Driver, assembly。

这个配置通常是不需要配置的,如果设置好了hibernate.dialect一般会自动选好对应的IDriver。
详细的dialect与IDriver的默认对应关系可以查看API文档。

connection.connection_string

数据库连接字符串

connection.connection_string_name

数据库连接字符串名称(定义在.Net配置文件<connectionStrings>配置节里面的连接字符串名。

connection.isolation

ADO.NET事务隔离级别, 查看System.Data.IsolationLevel类来了解各个值的具体意义, 但请注意多数数据库都不支持所有的隔离级别。

例如: Chaos, ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Unspecified

connection.release_mode

指定ADO.NET何时释放数据库连接。

例如: auto (默认) | on_close | after_transaction

注意,这些设置仅对通过ISessionFactory.OpenSession得到的ISession起作用。

对于通过ISessionFactory.GetCurrentSession得到的ISession,

所配置的ICurrentSessionContext实现控制这些ISession的连接释放模式。

command_timeout

指定NHibernate生成的IDbCommands对象的超时时间。 .

adonet.batch_size

指定用ADO.Net的批量更新的数量,默认设置为0(不启用该功能)。

proxyfactory.factory_class

代理工厂配置。用于指定是哪个中间件提供的延迟加载代理

可选的配置属性

有大量属性能用来控制NHibernate在运行期的行为. 它们都是可选的, 并拥有适当的默认值。

属性名

用途

dialect

设置NHibernate的Dialect类名 - 允许NHibernate针对特定的关系数据库生成优化的SQL

可用值: full.classname.of.Dialect, assembly

default_schema

在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上。

可用值: SCHEMA_NAME

use_outer_join

允许外连接抓取,已弃用,请使用max_fetch_depth。

可用值: true | false

max_fetch_depth

为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度。

值为0意味着将关闭默认的外连接抓取

可用值:建议在0 到3之间取值。

use_reflection_optimizer

开启运行时代码动态生成来替代运行时反射机制(系统级属性)。

使用这种方式的话程序在启动会耗费一定的性能,但是在程序运行期性能会有更好的提升。

注意即使关闭这个优化, Hibernate还是需要CGLIB. 你不能在hibernate.cfg.xml中设置此属性。

这个属性不能在hibernate.cfg.xml或者是应用程序配置文件<hibernate-configuration> 配置节中设置。

可用值: true | false

bytecode.provider

指定字节码provider用于优化NHibernate反射性能。 null代表完全关闭性能优化,

lcg用于轻量级的代码动态生成,codedom基于CodeDOM代码动态生成。

可用值: null | lcg | codedom

cache.provider_class

设置缓存实现类(实现ICacheProvider接口的类)

可用值: classname.of.CacheProvider, assembly

cache.use_minimal_puts

以频繁的读操作为代价, 优化二级缓存来最小化写操作(对群集缓存有效)。

可用值: true | false

cache.use_query_cache

允许查询缓存, 个别查询仍然需要被设置为可缓存的.

可用值: true | false

cache.query_cache_factory

自定义实现IQueryCacheFactory接口的类名, 默认为内建的StandardQueryCacheFactory。

可用值: classname.of.QueryCacheFactory, assembly

cache.region_prefix

二级缓存区域名的前缀。

可用值: prefix

query.substitutions

将NHibernate查询中的符号映射到SQL查询中的符号 (符号可能是函数名或常量名字)。

可用值: hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC

query.substitutions true=1, false=0 将导致符号true和false在生成的SQL中被翻译成整数常量

show_sql

输出所有SQL语句到控制台.

可用值: true | false

hbm2ddl.auto

在ISessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库。

使用 create-drop时,在显式关闭ISessionFactory时,将drop掉数据库schema。

可用值: create | create-drop

use_proxy_validator

是否启用验证接口或者是类是否可以使用代理,默认开启。

(检查实体类的属性或者是方法是否被设置为Virtual)

可用值: true | false

transaction.factory_class

自定义ITransactionFactory的实现,默认为NHibernate内建的AdoNetTransactionFactory。

可用值: classname.of.TransactionFactory, assembly

脑补一下:

ISessionFactory (NHibernate.ISessionFactory)

针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。 它是生成ISession的工厂,本身要用到IConnectionProvider。 该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选的二级缓存。

ISession (NHibernate.ISession)

表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短。 其隐藏了ADO.NET连接,也是 ITransaction的工厂。 其会持有一个针对持久化对象的必选(第一级)缓存, 在遍历对象图或者根据持久化标识查找对象时会用到。

持久的对象及其集合(Persistent Objects and Collections)

带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。 这些对象可能是普通的POCOs, 唯一特殊的是他们正与(仅仅一个)ISession相关联。 一旦这个ISession被关闭, 这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。 (例如,用作跟表示层打交道的数据传输对象。)

瞬态(transient)和脱管(detached)的对象及其集合

那些目前没有与ISession关联的持久化类实例。 他们可能是在被应用程序实例化后, 尚未进行持久化的对象。 也可能是因为实例化他们的ISession已经被关闭而脱离持久化的对象。

ITransaction (NHibernate.ITransaction)

(可选的)应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。 它通过抽象将应用从底层具体的ADO.NET事务隔离开。 某些情况下,一个ISession之内可能包含多个ITransaction对象。

IConnectionProvider (NHibernate.Connection.IConnectionProvider)

(可选的)生成ADO.NET连接以及Command对象的工厂。 它通过抽象将应用从底层的IDbConnectionIDbCommand隔离开。 仅供开发者扩展/实现用,并不暴露给应用程序使用。

IDriver (NHibernate.Driver.IDriver)

(可选的)一个封装了不同ADO.NET providers之间的差异(利用参数命名转换等ADO.NET支持的特性)的接口。

ITransactionFactory (NHibernate.Transaction.ITransactionFactory)

(可选的)生成ITransaction对象实例的工厂。 仅供开发者扩展/实现用,并不暴露给应用程序使用。

【NHibernate】配置- sql打印的更多相关文章

  1. springboot+mybatis 配置sql打印日志

    第一种: 配置类型 # 配置slq打印日志 logging.level.com.lawt.repository.mapper=debug重点: #其中   com.lawt.repository.ma ...

  2. springboot2、mybatis-plus3 一行配置实现打印sql最终填充的参数值

    在application.yml中添加: # 配置slq打印日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.st ...

  3. NHibernate配置

    因为NHibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数.幸运的是,大部分都已经有默认值了. NHibernate.Test.dll包含了一个示例的配置文件app.config, ...

  4. NHibernate系列文章五:NHibernate配置

    摘要 NHibernate有多种配置方法,代码,xml文件,以及Fluent NHibernate.这里只介绍最常用的两种NHibernate配置方法:通过代码和通过配置文件. 1. 通过代码配置 通 ...

  5. 配置SQL Server去使用 Windows的 Large-Page/Huge-Page allocations

    配置SQL Server去使用 Windows的 Large-Page/Huge-Page  allocations 目录表->页表->物理内存页 看这篇文章之前可以先看一下下面这篇文章 ...

  6. MyBatis 配置sql语句输出

    版权声明:本文为博主原创文章,未经博主允许不得转载. 此处使用log4j,加入jar包,然后在src路径下加入:log4j.properties文件 填入以下配置就可以打印了 log4j.rootLo ...

  7. springboot整合mybatis将sql打印到日志(转)

    在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" ...

  8. springboot整合mybatis将sql打印到日志

    在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" ...

  9. 通俗易懂的Nhibernate教程(2) ---- 配置之Nhibernate配置

    在上一个教程中,我们讲了Nhibernate的基本使用!So,让我们回顾下Nhibernate使用基本的步骤吧 1.NHibernate配置  ----- 这一步我们告诉了Nhibernate:数据库 ...

随机推荐

  1. XML&nbsp; XmlDocument

    1.SelectSingleNode(xPath)  xPxth:xml/cam/type  一层一层递进

  2. ionic获取事件中的对象

    ng-click="submit1($event, 'argsTest’)" $scope.submit1=function(event, args){ var target = ...

  3. 24小时学通Linux内核之进程

    都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲的全是进程,这点在大二的时候就困惑了我,结果那 ...

  4. es6模板字符串 问题记录

    自古无图无真相,望各位博主在条件允许的情况下,配张图片吧! 界面是用join拼接的,当循环td的时候会产生一个空串,界面就会出现一个逗号, 虽然功能块算实现了,不过始终美中不足,然后想到的办法是替换所 ...

  5. asp.net中用回车代替按钮事件

    第一步,先编写简单的页面代码,这里我们只需要一个按钮就足够了.当然,还有按钮事件. <html> <head> <title>测试绑定enter</title ...

  6. 在Delphi中,关于数组名称

    动态数组数组名代表的是第一个元素的内存地址. 静态数组名称代表的是数组第一个元素的内存位置, 而不是数组第一个元素的内存地址. 但对于静态数组,在某些情况下编译器可能会自动取数组地址,如: funct ...

  7. oracle中比较两表表结构差异和数据差异的方法

    在工作中需要完成这么一个需求:比较两个表的表结构是否形相同,并找出差异.比较两个表中的数据是否相同,并找出差异数据?    分析:由于表结构中字段比较多,手工比较很浪费时间,而且不能保证不出错误.对于 ...

  8. JqGrid在IE8中表头不能分组的解决办法

    修改JqGrid的js脚本: for (d = 0; d < c; d++) { if (b[d] != undefined) { //主要是添加这个判断 if (b[d].startColum ...

  9. (转)实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC

    在使用Memcached时,一般实时读写的场景并不多见.但多是Memcached写入后,在一定时间后才会有读操作.但是如果应用场景,是写入后瞬间即会有读操作呢?似乎没有什么特别之处,我们依然可以这样写 ...

  10. Js中的运算符

    运算符 运算符:就是可以运算的符号 比如 + .-.*./ 运算符包括: 算术运算符 比较运算符 逻辑运算符 赋值运算符 字符串运算符 1.算术运算符 +.-.*./.%(求余数).++.-- ++: ...