C# 在hbm文件中编写HQL的优点是什么?
我是这样在hbm文件中编写HQL的C# 在hbm文件中编写HQL的优点是什么?,c#,nhibernate,C#,Nhibernate,我是这样在hbm文件中编写HQL的 <query name="GetFabric"> <![CDATA[Select F.FabricName,FS.FabricSeasonName from Fabric F,FabricSeason FS where F.FabricSeasonID=FS.ID]]> </query> 但是我们可以在代码文件中编写查询,那么编写HQL(HBM文件或代码文件)的更好方法是什么呢?如果需要在单个函
<query name="GetFabric">
<![CDATA[Select F.FabricName,FS.FabricSeasonName from Fabric F,FabricSeason FS where F.FabricSeasonID=FS.ID]]>
</query>
但是我们可以在代码文件中编写查询,那么编写HQL(HBM文件或代码文件)的更好方法是什么呢?如果需要在单个函数中执行查询,我会将其嵌入代码中,但是,如果我需要在不同的项目/类中运行此查询,则会将其放入hbm.xml如果需要在单个函数中执行查询,则我会将其嵌入代码中,但是如果我需要在不同的项目/类中运行此查询,则会将其放入hbm.xml中。放置在Hibernate映射文件中的命名查询是:
- 比分散在Java代码中的查询更易于维护
- 全局可访问,因此您可以一次性定义查询,并在代码中多次使用它
- 更安全的是,它们可以防止SQL注入攻击
- 比分散在Java代码中的查询更易于维护
- 全局可访问,因此您可以一次性定义查询,并在代码中多次使用它
- 更安全的是,它们可以防止SQL注入攻击
这意味着,如果您有错误,您将在代码启动时知道这些错误。此外,HQL已缓存并准备运行。在代码中使用HQL意味着在第一次运行HQL时需要对其进行解析和缓存,因此第一次运行的代码会稍微慢一些。我将HQL嵌入
HBM
文件的主要原因很简单:-
在构建会话工厂时,HQL元数据被解析/检查/缓存
这意味着,如果您有错误,您将在代码启动时知道这些错误。此外,HQL已缓存并准备运行。在代码中使用HQL意味着在第一次运行HQL时,需要对其进行解析和缓存,因此第一次运行的代码会稍微慢一些。这三个答案对于代码中的HQL也是正确的。我想知道为什么它们更安全?它们对于SQL注入来说更安全,几乎与存储过程一样……好吧,请理解,您不能在嵌入映射文件中从ClassA编写
,其中id='+id
。这三个答案对于代码中的HQL也是正确的。我想知道为什么它们更安全?它们对于SQL注入来说更安全,几乎与存储过程一样……好吧,请理解,您不能从ClassA中编写,其中id='+id
在嵌入式映射文件中