【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。
详细的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对象实例的工厂。 仅供开发者扩展/实现用,并不暴露给应用程序使用。

时间: 2024-10-14 09:42:38

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

MyBatis 配置sql语句输出

此处使用log4j,加入jar包,然后在src路径下加入:log4j.properties文件 填入以下配置就可以打印了 log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.C

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

在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: [html] view plain copy print? <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "htt

第8章 配置 SQL Server 实例

第8章  配置 SQL Server 实例 8.1  查看常规属性 8.2  配置内存属性 8.3  配置处理器属性 8.4  配置安全性属性 8.5  配置连接属性 8.6  配置数据库设置属性 8.7  配置高级属性 8.8  配置权限属性

Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group

下面简单介绍一下如何在Red Hat Enterprise Linux上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的填充方法. 之前发表过一篇类似的文章是Configure Always On Availability Group for SQL Server on Ubuntu——Ubuntu上配置SQL Server Always On Availability Group,有对Ubuntu感兴趣的请看那一篇

安装和配置SQL Server 2014

安装和配置SQL Server 2014 准备: 1. SQL Server 2014是需要.NET Framework 3.5.1支持,点击"Server Manager",选择"Features",右侧选择"Add Features". 2. 选择".NET Framework 3.5.1 Features"属性,安装. 安装SQL Server 2014: 1. 下载64位SQL Server 2014英文企业版安装包:

hibernate4中oracle,sqlserver,mysql数据库的sql方言配置(SQL Dialects)

hibernate4中oracle,mysql,sqlserver数据库的sql方言配置(SQL Dialects) 数据库类型 Hibernate sql方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hibernate.dialect.DB2390Dialect PostgreSQL 8.1 org.hibernate.dialect.Po

第三篇——第二部分——第五文 配置SQL Server镜像——域环境SQL Server镜像日常维护

本文接上面两篇搭建镜像的文章: 第三篇--第二部分--第三文 配置SQL Server镜像--域环境:http://blog.csdn.net/dba_huangzj/article/details/28904503第三篇--第二部分--第四文 配置SQL Server镜像--非域环境:http://blog.csdn.net/dba_huangzj/article/details/27652857 在搭建的过程中,可能你会遇到比较多的问题,下面介绍一些常见的问题及解决方案,另外把主要精力放到对

让EFCore更疯狂些的扩展类库(一):通过json文件配置sql语句

前言 EF通过linq和各种扩展方法,再加上实体模型,编写数据库的访问代码确实是优美.舒服,但是生成的sql不尽如意.性能低下,尤其是复杂些的逻辑关系,最终大家还是会回归自然,选择能够友好执行sql语句的ORM,认认真真的编写sql:问题是:EF是否也能够很友好的执行sql语句?EF提供直接执行sql语句的方法并不多,而且也是极其简单的:那是否容易进行扩展?答案是肯定的,在DbContext下提供了Database属性就是为了执行sql用的,然后自己就通过Database下的方法属性进行了扩展(

安装和配置SQL Server 2016 With SP1

安装和配置SQL Server 2016 With SP1 Part1:创建服务启动账号 Part2:安装 Part3:配置篇 Part4:安装SSMS 下载SSMS:https://msdn.microsoft.com/en-us/library/mt238290.aspx Part5:配置SQL Server实例参数