nhibernatesql语句
‘壹’ Nhibernate和Hibernate有那些区别
NHibernate和Hibernate的主要区别在于它们的目标平台和运行环境。
首先,Hibernate是Java世界中最流行的ORM(对象关系映射)框架之一。它提供了一种机制,允许Java开发者将对象模型映射到关系型数据库模型,从而简化了数据库访问和操作的过程。Hibernate通过提供一系列的API和工具,使得开发者能够以一种面向对象的方式来处理数据库,而无需关心底层的sql语句和数据库连接等细节。
相比之下,NHibernate是Hibernate的一个.NET版本,旨在为.NET开发者提供类似的功能和便利。NHibernate的设计和API与Hibernate非常相似,因此熟悉Hibernate的开发者可以很容易地迁移到NHibernate。NHibernate同样提供了ORM功能,允许.NET开发者以面向对象的方式来访问和操作数据库。
除了目标平台和运行环境的不同之外,NHibernate和Hibernate在功能和使用上也存在一些细微的差异。例如,由于.NET和Java平台的差异,NHibernate在处理一些特定于.NET的功能和特性时,可能需要采用不同的方式或提供额外的支持。此外,由于NHibernate是在.NET平台上实现的,因此它可能会更好地集成和利用.NET平台的一些特性和优势。
总的来说,NHibernate和Hibernate都是功能强大的ORM框架,它们的主要区别在于目标平台和运行环境。Hibernate主要针对Java平台,而NHibernate则针对.NET平台。尽管它们在功能和使用上存在一些细微的差异,但总体而言,它们的设计和API都非常相似,使得开发者可以在不同的平台上享受到类似的便利和优势。
‘贰’ 在做asp.net网站时,使用NHibernate可是不显示执行的sql语句,怎样能查看到
调试的时候,看下面的输出栏。
配置文件设置:
<property name="show_sql">true</property>
‘叁’ sql语句什么情况下使用N前缀
一开始就提到了与数据源无关的问题。当时只是从泛化的角度出发,利用ADO.net的DbProviderFactory根据不同的数据提供程序的名称来实现一个与数据库无关的数据访问基类。但仅仅做到这一步还不能实现真正意义上的与数据源无关。 在程序的开发过程中,如果不考虑使用DbParameter的情况,绝大部分应用都可以用Transact-SQL来搞定,而不需要用到与具体数据源相关的特性。但是,现实总是比较残酷的。DbParameter的应用也是如此广泛,最容易想到的情况就是利用DbParameter来防止注入和用来处理一些不容易写在SQL语句中的值。SQL语句中的参数名随着数据提供程序的不同,也会不同,MS SQL Server用的是“@”,Oracle用的是“:”,到了OleDb基本清一色地改成了“?”。如果不解决这个问题,就没法做到真正的与数据源无关。 如果用NHibernate,可以考虑HQL来解决此问题。HQL代替SQL再经过NHibernate的词法分析器处理,转换为SQL语句。如此一下,就不必考虑数据提供程序的参数前缀到底是啥了。可是本人始终不太喜欢NHibernate(从看到Hibernate时候开始),觉得配置文件太多了,而且体系又比较庞大,因此总寻思着怎么干些所谓的“重复造轮子”的事情。本人的想法很简单,咱不发明新语言,只是简单地针对那绝大部分的情况,将使用Transact-SQL的开发时,把语句中那些五花八门的参数名统一使用“@”,在执行的时候根据具体的数据提供程序进行替换。如此一来,既可以满足与数据源无关的目标,又不需要费太多的力气。 首先要考虑的问题是,如何获取参数的前缀。可以用这个方式来获取参数的前缀“DbConnection.GetSchema("DataSourceInformation").Rows[0]["ParameterMarkerFormat"]”。摘一段MSDN的说明:ParameterMarkerFormat表示如何格式化参数的格式化字符串。如果数据源不支持命名的参数,此字符串中的第一个占位符应是格式化参数名的位置。例如,如果数据源期望使用‘:’为前缀命名参数,此字符串将为“:{0}”。在使用参数名“p1”格式化此字符串时,生成的字符串为“:p1”。如果数据源期望参数以‘@’为前缀,但是名称中已包含该符号,此字符串将为‘{0}’,格式化名为“@p1”的参数的结果将只是“@p1”。如果数据源不期望使用命名参数,而期望使用‘?’字符,格式字符串可以只指定为‘?’,这样将忽略参数名。对于 OLE DB,将返回‘?’。更详细的信息可以参考MSDN中的“通用架构集合 (ADO.NET)”。按照之前的说法,有了参数前缀后,剩下的问题就是如何将SQL语句和DbParameter.ParameterName中的“@”替换掉。DbParameter.ParameterName比较简单,直接String.Replace就OK,但是SQL语句中的情况比较复杂。“@”可能不仅仅出现在参数名中,也可能出现在字符里。简单的Replace可能无法满足要求。最初觉得比较好的做法有2种:正则表达式和词法分析器。但后来考虑到,字符串中 “@” 出现的情况也相当难以预料且参数名比较特殊,为了支持一些特殊字符(比如:中文<总觉得有些人喜欢用>),再加上之前用Antlr2实现了一个基本的Select词法分析器,所以就不考虑使用正则表达式,而是直接在之前的基础上做了些简化,生成了一个仅针对参数的词法分析器。因为有Select语句词法分析器的基础,所以搞定参数的时候就简单得多了。参数的规则可以定义为“@”+标识符,antlr2所需的主要规则2条:1、标识符:(('_' | 'a'..'z' | 'A'..'Z' | '\u2e81'..'\u2eca' |'\u3447'..'\u4dae' | '\u4e00'..'\u9fa5' | '\uf92c'..'\ufa29')+ ('0'..'9' | 'a'..'z' | 'A'..'Z' | '_' | '\u2e81'..'\u2eca' |'\u3447'..'\u4dae' | '\u4e00'..'\u9fa5' | '\uf92c'..'\ufa29')*) {$setType(Token.SKIP);}2、参数:('@' N_QUOTED_STRING)=>(('@' N_QUOTED_STRING) {_ttype=PARAMETER;}) | (('@' '@' N_QUOTED_STRING)=>('@' '@' N_QUOTED_STRING){_ttype=SYS_VAR;$setType(Token.SKIP);}) | (':' N_QUOTED_STRING)=>((':' N_QUOTED_STRING) {_ttype=PARAMETER;}) | '?'还必须注意的是,要替换的目标只是参数,所以没有必要将其他如:保留字、字符串、数字、符号之类的东西取出来,通通加上“{$setType(Token.SKIP);}”跳过之。 利用词法分析器对SQL语句进行解析,逐个替换掉原来SQL语句中的参数,最后得到的就是可以在目标数据源上执行的SQL语句。虽然有人会提出说,如果执行1000条SQL语句,那不是得执行1000此解析、替换,效率何存?但是,按照经验来说,1次执行1000条SQL语句一般情况下只是参数的值不同,但SQL语句本身并不会有什么差异;如果使用实体进行持久化,碰到这种情况的几率更加减少。所以,本人认为,上述这种替换的做法还是可取的,特别是在某些情况下,一个应用程序运行在两套不同的数据库上时(连线时用服务器数据Oracle,离线时暂时使用本地Access数据库),这个做法就更能显示出它的价值了。
‘肆’ 有了存储过程,linq to sql还有必要用么
这两者比较比较少
首先使用存储过程就是一个有争议的话题,爱使用存储过程的程序员往往会把过多的业务逻辑封装在存储过程里,导致应用程序的可移植性比较差
而且一般会说使用存储过程的性能比较高,但现在由于各种缓存技术的使用,减少频繁的查询数据库已经是共识。
一般而言使用数据库的存储过程居多还是业务逻辑处理居多基本取决于公司的技术方向,我也见到不少公司是忽视软件的开发,基本处理逻辑都是在数据库中解决的。
至于linq to sql,说句老实话谈不上是什么特别好的技术,仅凭仅能使用sql server数据库这一点,就已经限制了它的发展。看看现在多少公司还在用免费的mysql就知道了,更不要说还有那么多的开源产品是建立在mysql之上。而同类的产品Nhibernate绝不会比它差。
‘伍’ nhibernate 怎么写sql语句啊 急
nhibernate 怎么写sql语句啊 急
NHibernate 检视生成的sql语句:
其实就是Interceptor的应用, 原始码中Interceptor的预设实现是EmptyInterceptor,
[Serializable]
public class EmptyInterceptor : IInterceptor
{ 前面省略n行程式码
public SqlString OnPrepareStatement(SqlString sql)
{
return sql;
}
} public class MyInterceptor : EmptyInterceptor
{
public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
return base.OnPrepareStatement(sql);
}
} 我们要做的就是继承EmptyInterceptor,重写OnPrepareStatement()方法,重写方法里面就是你大展拳脚的地方了,
想写档案写档案,想输出到页面就输出到页面,什么都不做都可以,如上
怎么用呢?
public override void Update(Admin entity)
{
ISession session = HibernateTemplate.SessionFactory.OpenSession(new MyIntercepotr);
session.Update(entity);
session.Flush();
}
在你想要检视的操作中,开启session 的时候新增上自定义的拦截器就可以了,想给所有的操作都配置的话就要用到全域性配置档案了。
重写OnPrepareStatement()的时候一句话都不改,我只是在这里打一个断点而已,只要看看生成的sql语句就行了,然后去修改配置档案再来debug,确认怎么配置生产的sql最优。
用LinqPad检视Nhibernate生成的sql语句
使用Nhibernate开发一般都要对Nhibernate生成的sql语句进行检视及分析,检视Nhibernate生成的sql语句,可以使用NHProfiler和log4。但NHProfiler是要付费的(当然,在天朝,你懂的……),用log4配置比较麻烦。今天在网上检视Linq to Nhibernate资料的时候发现了一个工具LinqPad,于是又找了相关资源,发现它还真能实现Nhibenate语句的检视。废话少说,看下面的使用方法吧!
1、 下载LinqPad,地址::linqpad./
2、 配置LinqPad,执行LinqPad,在选单里选择Query—>Query Propeties;在选项卡中Additional References,点选“Browse…”按钮,选择专案中必要的Dll。
Dll包括:资料库驱动dll,实体对映dll(图中的Entity),nhibernate相关的dll
如何播放蓝光盘?急!
要蓝光播放器啊
tmt
powerdvd
aurora blu-ray player
随便弄个破解的就成
你要是不切换字幕音讯啥的,就BDMV 档案里边,找最大的.m2ts 的档案
急,女朋友让猜迷语呢!!
名字,结婚后,女人是不会用男人的名字的,也不对。
只有男人的姓氏,才是正确答案,理由如下:
1、东方女人在结婚后,人会称其“某太太”,这个“某”就是老公的姓氏。
西方女人在结婚后,就会将姓改为和老公一样。
2、长度上,东方的姓氏通常只有一个字,而西方姓氏却是一串字母,比东方的长。
3、男人当和尚后,只有法号,没有姓名,所以不用。
小金毛拉肚子··急
是吃撑的拉肚子就给他吃些健胃消食的药
要是吃坏肚子了就给它喝一支庆大霉素的注射液
关于基金定投---急!
用身份证登陆登陆你买的基金的基金公司网站
密码是你的身份证后6位数字。。
登陆进去后,就可以查到您所想知道的资讯了!
还有一种方式是你去银行柜台打印基金对账单,上面也会有你想知道的资讯!
急!化学,SO2的制备
应该该不会产生H2,可以用排NaOH溶液的方法收集,再点燃收集到的气体看看是不是H2。但估计正常情况下,收集不到气体。
写一个小片段~~~急
今天举行同事聚餐,公司几个美女打扮的千姿百态,在这个风和日丽的天气里,一起去“全聚德”烤鸭店撮了一顿,大家都对那烤鸭赞不绝口,一边津津有味的吃,一边兴致勃勃的侃大山,公司的美女真是多,莺莺燕燕坐满一屋芳菲,真是百花盛开呀!
数学题,求解答,急啊
我敢打赌 你上课没认真听
4:sin(2x+π/2)=cos2x,这是三角函式的诱导公式 书上有 y=cos2x是偶函式 这种东西你画个图就容易理解了!
5:设a=(i,j) b=(x,y) 若ab, i/x=j/y
6:a·b=|a|*|b|cos<a,b> 这是公式 推导过程 自己看书
7:横座标伸长2倍 就是扩大2倍 那么就是用1/2x替换以前的x 就行了!这个还是要根据自己画图来理解!
8:[π/2,π]之间 就确定了cosΘ的正负 在[π/2,π]之间 cosΘ为负数,至于你后面那个式子
是根据二倍角公式 推导而来的
这是二倍角公式的其中一个
cos2α=cos²α-sin²α
=1-2sin²α
=2cos²α-1
上式中 可以找到你要的依据!
不过你字还算可以!
usewildcards是什么意思,急!
Use Wildcards
使用万用字符;
Use Wildcards
使用万用字符;
Use Wildcards
使用万用字符;
布满造句长一点,急!
因为要抢救伤员,军医在手术室里忙了几天几夜,眼睛布满了血丝,让人既心疼又感动。
满意请采纳!谢谢!