【NHibernate】配置- sql打印
<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。 |
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对象的工厂。 它通过抽象将应用从底层的IDbConnection或IDbCommand隔离开。 仅供开发者扩展/实现用,并不暴露给应用程序使用。
IDriver (NHibernate.Driver.IDriver)
(可选的)一个封装了不同ADO.NET providers之间的差异(利用参数命名转换等ADO.NET支持的特性)的接口。
ITransactionFactory (NHibernate.Transaction.ITransactionFactory)
(可选的)生成ITransaction对象实例的工厂。 仅供开发者扩展/实现用,并不暴露给应用程序使用。
【NHibernate】配置- sql打印的更多相关文章
- springboot+mybatis 配置sql打印日志
第一种: 配置类型 # 配置slq打印日志 logging.level.com.lawt.repository.mapper=debug重点: #其中 com.lawt.repository.ma ...
- springboot2、mybatis-plus3 一行配置实现打印sql最终填充的参数值
在application.yml中添加: # 配置slq打印日志 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.st ...
- NHibernate配置
因为NHibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数.幸运的是,大部分都已经有默认值了. NHibernate.Test.dll包含了一个示例的配置文件app.config, ...
- NHibernate系列文章五:NHibernate配置
摘要 NHibernate有多种配置方法,代码,xml文件,以及Fluent NHibernate.这里只介绍最常用的两种NHibernate配置方法:通过代码和通过配置文件. 1. 通过代码配置 通 ...
- 配置SQL Server去使用 Windows的 Large-Page/Huge-Page allocations
配置SQL Server去使用 Windows的 Large-Page/Huge-Page allocations 目录表->页表->物理内存页 看这篇文章之前可以先看一下下面这篇文章 ...
- MyBatis 配置sql语句输出
版权声明:本文为博主原创文章,未经博主允许不得转载. 此处使用log4j,加入jar包,然后在src路径下加入:log4j.properties文件 填入以下配置就可以打印了 log4j.rootLo ...
- springboot整合mybatis将sql打印到日志(转)
在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" ...
- springboot整合mybatis将sql打印到日志
在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" ...
- 通俗易懂的Nhibernate教程(2) ---- 配置之Nhibernate配置
在上一个教程中,我们讲了Nhibernate的基本使用!So,让我们回顾下Nhibernate使用基本的步骤吧 1.NHibernate配置 ----- 这一步我们告诉了Nhibernate:数据库 ...
随机推荐
- [转]永久告别Android的背景选择器Selector!无需切很多图了!
package com.zoke.custom.autobg; import android.content.Context; import android.content.res.TypedArra ...
- SQL Server select into/bulkcopy用法
select into/bulkcopy用法 一.背景 如何提升批量插入效率,各位看官,瞧好了! exec sys.sp_dboption '数据库名','select into/bulkcopy', ...
- [改善Java代码]推荐使用String直接量赋值
建议52:推荐使用String直接量赋值 一.建议 String对象的生成方式有两种: 1.通过new关键字生成,String str3 = new String(“中国”); 2.直接声明,如:St ...
- 一些xcode5.1创建的工程在xcode6.0下不能编译的问题
这是因为Xcode5.1.1自动选上了arm64架构, 建议解决办法是: Build Settings-ValidArchitectures中却掉arm64
- 改变xmind显示中文界面
最近打算迁移到ubuntu系统做为主系统,打算使用xmind这个工具,因为我的ubuntu并没有使用简体中文,xmind是根据系统的语种来自动选择的,所以也直接为英文界面,实在使用不习惯,查到了这篇文 ...
- edmbed system----ecos
方案公司用的嵌入式系统用的就是开源的可配置系统, ecos 不过提到它,对方公司研究的并不透彻,它有一个可以配置的dhcp部分,也就是dns可以选择不分配给连接的客户端 不过对方公司不这个事,更不知道 ...
- TSQL基础(三)
字符处理函数 sql中常见的字符类型有: char(n) --长度固定 不可变 非Unicode 字符数据 n 必须是一个介于 1 和 8,000 之间的数值 nchar(n) --长度固定 不可变 ...
- Cocos2d-x中SQLite数据库管理工具
数据库创建完成后,我们可能需要看看数据库中数据是否成功插入,很多人喜欢使用图形界面工具来管理SQLite数据库.SQLite图形界面管理工具有很多,我推荐使用SQLiteStudio工具,下载地址ht ...
- 移动web屏幕适配方案
刚进部门就被拉去趟移动端Web的浑水,视觉稿是按照640px设计的.那如何做屏幕适配呢?当然想到的第一方法就是问前辈了,问他们之前怎么做的,前辈说直接按视觉稿来,我说640太大了,他说除以2啊,按32 ...
- [译]JavaScript检测浏览器前缀
原文地址: Detect Vendor Prefix with JavaScript 不管浏览器私有前缀的现状如何,我们还是要与之为伴,并且有时候还需要利用它来做一些事情.这些前缀可以用于CSS(比如 ...