当前位置:首页 » 编程语言 » nhibernate输出sql语句
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

nhibernate输出sql语句

发布时间: 2022-07-18 10:08:24

‘壹’ 请问如何将这条sql左外连接查询的语句转换为Nhibernate的HQL语句

select
TB_ITEM_DEPLOY.F_ITEM_CODE AS F_ITEM_CODE,
TB_ITEM_DEPLOY.F_MEDIA_CODE1 AS F_MEDIA_CODE1,
TB_ITEM_DEPLOY.F_ITEM_NAME AS F_ITEM_NAME,
TB_ITEM_DEPLOY.F_AUTO_ID AS F_AUTO_ID,
TB_ITEM_DEPLOY.F_ORDER AS F_ORDER,

TB_ITEM_INFO.F_POINT_CODE AS F_POINT_CODE,
TB_ITEM_INFO.F_CODE1 AS F_CODE1,
TB_ITEM_INFO.F_CODE2 AS F_CODE2,
TB_ITEM_INFO.F_DEPT_CODE AS F_DEPT_CODE,
TB_ITEM_INFO.F_POSITION AS F_POSITION,
TB_ITEM_INFO.F_FLAG AS F_FLAG

FROM
TB_ITEM_DEPLOY LEFT OUTER JOIN TB_ITEM_INFO

ON
(TB_ITEM_DEPLOY.F_ITEM_CODE = TB_ITEM_INFO.F_ITEM_CODE) and (TB_ITEM_INFO.F_POINT_CODE = '444444')
WHERE
(TB_ITEM_DEPLOY.F_MEDIA_CODE1 = '11')

首线告诉你 你现在写的是完全连接 JOIN ON
左连接的写法是 LEFT JOIN ON
右连接的写法使 RIGHT JOIN ON
换到 你的 SQL 中就是

select
TB_ITEM_DEPLOY.F_ITEM_CODE AS F_ITEM_CODE,
TB_ITEM_DEPLOY.F_MEDIA_CODE1 AS F_MEDIA_CODE1,
TB_ITEM_DEPLOY.F_ITEM_NAME AS F_ITEM_NAME,
TB_ITEM_DEPLOY.F_AUTO_ID AS F_AUTO_ID,
TB_ITEM_DEPLOY.F_ORDER AS F_ORDER,

TB_ITEM_INFO.F_POINT_CODE AS F_POINT_CODE,
TB_ITEM_INFO.F_CODE1 AS F_CODE1,
TB_ITEM_INFO.F_CODE2 AS F_CODE2,
TB_ITEM_INFO.F_DEPT_CODE AS F_DEPT_CODE,
TB_ITEM_INFO.F_POSITION AS F_POSITION,
TB_ITEM_INFO.F_FLAG AS F_FLAG

FROM
TB_ITEM_DEPLOY LEFT OUTER LEFT JOIN TB_ITEM_INFO

ON
(TB_ITEM_DEPLOY.F_ITEM_CODE = TB_ITEM_INFO.F_ITEM_CODE) and (TB_ITEM_INFO.F_POINT_CODE = '444444')
WHERE
(TB_ITEM_DEPLOY.F_MEDIA_CODE1 = '11')

明白

还有一种写法为

select
TB_ITEM_DEPLOY.F_ITEM_CODE AS F_ITEM_CODE,
TB_ITEM_DEPLOY.F_MEDIA_CODE1 AS F_MEDIA_CODE1,
TB_ITEM_DEPLOY.F_ITEM_NAME AS F_ITEM_NAME,
TB_ITEM_DEPLOY.F_AUTO_ID AS F_AUTO_ID,
TB_ITEM_DEPLOY.F_ORDER AS F_ORDER,

TB_ITEM_INFO.F_POINT_CODE AS F_POINT_CODE,
TB_ITEM_INFO.F_CODE1 AS F_CODE1,
TB_ITEM_INFO.F_CODE2 AS F_CODE2,
TB_ITEM_INFO.F_DEPT_CODE AS F_DEPT_CODE,
TB_ITEM_INFO.F_POSITION AS F_POSITION,
TB_ITEM_INFO.F_FLAG AS F_FLAG

FROM
TB_ITEM_DEPLOY A ,
TB_ITEM_INFO B

WHERE
(TB_ITEM_DEPLOY.F_MEDIA_CODE1 = '11')
AND TB_ITEM_INFO.F_POINT_CODE = '444444'(+)

明白?

来源信息:饭客网络

‘贰’ 在配置hibernate中见到一条sql这样的命令,求解析,谢谢

这种sq是HQL语句,是用对象来表示表,用对象的属性来表示表中的字段,来进行查询的。
一般这个对象是根据表来创建的,对象的属性和表的字段是一一对应的。
就如from Subject as sub where sub.subjectTitle=?,表示从对象Subject所对应的表中,查询该表中对象Subject 的属性subjectTitle所对应的字段,字段的值为?,也就是你要传进来的参数。假设,对象Subject 对应的表为subject,属性对应的字段为subjectTitle,则上面那个HQL可以写成SQL语句:select * from subject as sub where sub.subjectTitle=?

‘叁’ C#中NHibernate 映射SQL时 怎么样做到只映射出部分字段

这个不叫映射好吧!!你说的这个只是一个在一个XML文件中写sql语句的地方而已,
可以sql语句,也可以是存储过程的名字,执行的时候对应的去执行就是了撒!!

‘肆’ 关于Nhibernate项目换数据库时,以前的SQL语句问题

不是很理解,你既然用了hibernate那换数据库和查询语句应该是没有关系的,只要更改数据库驱动就可以了,而且不用list的话,返回是一个数据集改如何处理?除非你返回一定是一个对象,那可以强制转换,用toObject方法来做

‘伍’ 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和log4net。但NHProfiler是要付费的(当然,在天朝,你懂的……),用log4net配置比较麻烦。今天在网上查看Linq to Nhibernate资料的时候发现了一个工具LinqPad,于是又找了相关资源,发现它还真能实现Nhibenate语句的查看。废话少说,看下面的使用方法吧!
1、 下载LinqPad,地址:http://www.linqpad.net/
2、 配置LinqPad,运行LinqPad,在菜单里选择Query—>Query Propeties;在选项卡中Additional References,点击“Browse…”按钮,选择项目中必要的Dll。
Dll包括:数据库驱动dll,实体映射dll(图中的Entity),nhibernate相关的dll

‘陆’ NHibernate

sqlconnecsting cn=new sqlconnecstring("连接数据库语句就不写了");
sqlcommand cmd=new sqlcommand();
com.connecsting=cn;
cn.open();
cmd.commandtext="你要执行的任何SQL语句";//建立临时表,修改删除表,附加数据库,建立模式数据表都可以,查询等都可以在这执行
cmd.executenonquery();
cn.colse();

‘柒’ NHibernate是什么

NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。

NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生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和log4net。但NHProfiler是要付费的(当然,在天朝,你懂的……),用log4net配置比较麻烦。今天在网上查看Linq to Nhibernate资料的时候发现了一个工具LinqPad,于是又找了相关资源,发现它还真能实现Nhibenate语句的查看。废话少说,看下面的使用方法吧!
1、 下载LinqPad,地址:http://www.linqpad.net/
2、 配置LinqPad,运行LinqPad,在菜单里选择Query—>Query Propeties;在选项卡中Additional References,点击“Browse…”按钮,选择项目中必要的Dll。
Dll包括:数据库驱动dll,实体映射dll(图中的Entity),nhibernate相关的dll

‘玖’ 在C#中,用NHibernate对系统进行优化有哪些方式

最好是参考下官方文档,不然研究起来有可能走进一个误区。
其实也没有什么新鲜的东西,简单的项目没必要使用它。因为都是基于ADO.NET的。把ADO.NET学好,那自然就是水到渠成的事情了。

NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.它是着名的Hibernate的.Net版本.
NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你完全不用自己编写Sql语句去操作这些对象,NH会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西.
开发过程
HNibernate将会有一些工具帮助你,如:生成schema,根据映射文件(Mapping file)生成类,并更新schema(一个新开发者的建议).然而,在本文档中,前提是你已经手动的数据库的创建喝.Net类的编写...
这里是我们要做的:

1. 在数据库中创建把.Net类持久化的对应表.
2. 创建需要被持久化的.Net类.
3. 创建映射文件,以告诉NH怎样持久化这些类的属性.
4. 创建NH的配置文件,以告诉NH怎样连接数据库.
5. 使用NH提供的API.

步骤1:创建数据库表
步骤2:创建.Net类
步骤3:编写映射文件(Mapping File)
步骤4:创建数据库配置文件