4

问题

在我的一些项目中,我使用了 SQL 代码,这没什么特别的。但我正在重新考虑这个策略。我搜索了一些东西来分隔我的代码和 SQL 语句。

我找到了一个我喜欢的答案,将所有 SQL 语句收集在一个属性文件中。我认为它很好,很干净。但是如果你想插入变量怎么办。

我发现的另一个解决方案是使用 DAO 对象。例如,您使用以下方法创建一个 MYSQLFactory 类:addCustomer(Customer customer)、deleteCustomer(int CustomerId) 等。您将集中您的 SQL 代码。仍然不会称它为分开的。

有没有更好的方法来做到这一点而不使用像 Hibernate 这样的 ORM。我读得越多,我就越相信 JAVA 没有一种简洁的方法可以做到这一点。

搜索来源

Java - 将 SQL 语句存储在外部文件中

将 SQL 与 Java 代码分离

更新

感谢您的好评。我只是对此感到好奇。@Gilbert,我认为这是一个很好的解决方案,事实上,我曾经曾经使用过您的解决方案,所以谢谢。:)

有时我只是喜欢研究某些问题的新方法。

4

4 回答 4

2

你没有说明你的目标是什么。我不确定您是否只是在寻找将所有 SQL 代码放在一个地方的技术解决方案,或者是关于如何跨多种语言管理应用程序的建议。

对于用另一种语言管理 SQL 代码,以下是你的朋友:

  • 存储过程
  • 意见

以下不是你的朋友:

  • 即席查询

问题是数据库的“API”。SQL 是原始数据表的接口。但是,通常数据库是应用程序的一个组件,应该有自己的 API。通常,该层应由视图和存储过程组成。因此,例如,更新和插入(即即席查询)应该包装在存储过程中。

于 2013-01-29T14:55:41.303 回答
1

不,没有。如果您不使用 ORM,则需要在代码中的某处进行直接 SQL 调用。如果您开始混淆工厂模式中的 sql 调用,那么您只是在制作一个糟糕的 ORM。

于 2013-01-29T14:52:38.663 回答
1

我个人更喜欢将 SQL 查询放在执行它的 Java 文件中。这使得维护代码更容易:无需在多个文件之间切换。

也就是说,将 SQL 查询存储在外部文件(属性或 XML 或其他文件)中非常简单。如果你需要插入一个变量,无论如何你都会使用准备好的语句,所以你的 SQL 看起来像

select foo.* from Foo foo where foo.id = ?

唯一的困难是动态生成的 SQL 查询(例如,来自一组可选的搜索条件)。但是有些 API 允许生成这种 SQL 查询,而无需连接查询的各个部分。

于 2013-01-29T14:56:23.830 回答
0

关于您的问题:
没有理想的方法,有几种解决方案:
A. 使用 ORM - 不确定您为什么不想要它。
B.按照您的建议使用属性文件 - 关于参数,
您需要处理它,考虑使用一些框架为您执行参数替换。
C. 您可以使用数据库中的存储过程/视图层抽象一些 SQL 查询。

于 2013-01-29T14:59:04.107 回答