【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:数据库 ...
随机推荐
- [Oracle AR]Territory Flexfield
You can use the Territory Flexfield for recording and customized reporting on your territory informa ...
- jboss部署出现jboss.naming.context.java.rmi找不到错误
最近,在机器人程序中使用jmx,准备做个远程调用,客户端是web,部署在jboss上,本地测试的都好好的,发到预发布上就是不行, 错误描述: Failed to retrieve RMIServer ...
- 同步的数据过大,导致shareplex超时,并自动kill掉了同步会话
数据库迁移,其中有个数据量较大的表的索引,在迁移的时候出现,同步超时的情况 Notice 2014-08-05 15:14:54.856107 14240 3892311808 Poster: Ope ...
- 理解Android系统的进程间通信原理(二)----RPC机制
理解Android系统中的轻量级解决方案RPC的原理,需要先回顾一下JAVA中的RMI(Remote Method Invocation)这个易于使用的纯JAVA方案(用来实现分布式应用).有关RMI ...
- MyBatis(3.2.3) - Dynamic SQL
Sometimes, static SQL queries may not be sufficient for application requirements. We may have to bui ...
- SQL语句添加,删除主键
IF EXISTS (SELECT * FROM sys.all_objects WHERE type_desc= N'主键名')begin --删除主键 alter table 表名 drop ...
- unity3d游戏无法部署到windows phone8手机上的解决方法
今天搞了个unity3d游戏,准备部署到自己的lumia 920上,数据线连接正常,操作正常,但是“build”以后,始终无法部署到手机上,也没有在选择的目录下生产任何相关文件.(你的系统必须是win ...
- HDOJ2011多项式求和
多项式求和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- ubuntu(16.04.01)学习-day2--高级命令
1.查找命令 find -name "hello.c" grep "test" grep "usb" -c -r /drivers/usb ...
- Android之简单页面跳转
Uri.parse方法返回的是一个URL类型,通过URL可以访问一个网络上的或者本地资源,Intent()方法是调用哪个组件来打开这个URL. package com.example.web; imp ...