![]() |
1
4
在Java中已经有了嵌入式SQL的标准,它被称为 SQLJ . 话虽如此,我从未见过它在野外使用,我也不知道它是否真的是一个选择了,与现代工具。当标准出现时,甲骨文在很大程度上支持它,但我认为它已经死在葡萄树上了。 |
![]() |
2
2
在SQL域中已经有类似于Java和.NET的“嵌入式语言预处理器”: http://ibatis.apache.org/ 另外,人们通常使用成熟的orm,比如 Hibernate ,以抽象出SQL。 请注意,这些工具不允许在Java代码本身中存储SQL字符串,但服务于类似的意图。我个人认为在代码本身中存储sql字符串没有任何好处,因为这通常比较混乱。将所有sql整齐地写入一个特定的文件有助于sql的可重用性和可维护性。如果需要的话,它们确实允许sql作为字符串,但这通常是作为最后的措施(当orm工具对您的用例没有很好的抽象时)。 编辑:我认为混合sql和代码(不管是不是oo)是脆弱的,不可取的。最好有一个集中的地方来存储查询。这是iBATIS方法。 |
![]() |
3
1
对象关系映射工具(如Hibernate)理论上可以减少此类问题。”理论上“) 另外,如果您可以使用grails,我听说您可以编写非常好的多行字符串,这使得读取sql语句更加容易。 |
![]() |
4
1
你可以用一个像样的ide来解决这样的问题。例如,intellij idea支持一种称为注入式语言的特性。它允许您在字符串文本中使用所需的语言编写代码,并能够使用代码突出显示、完成、导航和其他服务。您可以在这里阅读更多信息: http://blogs.jetbrains.com/idea/2009/03/user-defined-language-injection/ |
![]() |
5
1
对于目前的情况,我可以提出以下几点 将SQL作为语言的一部分嵌入有许多问题:
另一方面,DSL现在都是大肆宣传。还有一些语言有xml文本。因此,我认为很有可能出现(或已经存在)具有类似orm功能的语言,并允许您使用sql(或hql?)就像代码中的dsl。 |
![]() |
6
0
这种方法的主要缺点之一是 SQLJ 事实上,预处理器将阻止为数据访问逻辑使用现代ide工具。具有优秀的IDE,如 Eclipse , NetBeans 或 IntelliJ IDEA ,这是反对预处理器的有力论据。( we also wrote about this in our blog ) 同时,dsl工具 Eclipse Xtext 或 JetBrains MPS 仍在努力增强Java语言本身,以便拥有像以前在COBOL中所拥有的东西。 一种选择是使用内部DSL jOOQ 尽管这不是真正的sql |
![]() |
7
-2
好吧,最简单、最无脑的方法就是将sql作为字符串包含在代码中。 有点像
这可能不是很复杂,但它是有效的。缺点是编译器无法检查您的sql语法。稍微好一点的解决方案是 Prepaired Statements 指定参数模板的位置。所以你可以做如下事情:
这样,您的jdbc连接 应该 在运行时创建准备好的语句时立即引发异常。因此,如果代码第一次工作,它应该一直工作。 然后在以后要更改参数时在代码中执行以下操作:
Microsoft有一种嵌入的.NET查询语言,名为 LINQ . 对于您使用的数据库 LINQ to SQL 它允许您在代码中嵌入查询。 |