【问题标题】:Best place to put SQL statements in Java在 Java 中放置 SQL 语句的最佳位置
【发布时间】:2013-08-15 01:18:57
【问题描述】:

我知道每种方法都有利有弊,但是否有关于将 SQL 语句放在何处的最佳做法?我一直将它们放在 Java 类中,但我进入了一个项目,通过 Spring 字符串构造函数将它们注入。原因是如果 SQL 语句在应用程序上下文中,您不必删除所有的 " 和 + 来让 SQL 复制/粘贴到服务器上。我认为这不是一个很好的理由,但是这就是我暂时介入的。 我知道这也可以通过属性来完成。

所以我的问题是 SQL 语句应该放在应用程序上下文、Java 文件、属性文件还是我没有想到的某个地方?


更新:

从我得到的回复来看,准备好的语句似乎是 SQL 语句的最佳位置。但是动态生成的 SQL 语句呢?该代码将有许多不同的字符串,这些字符串将连接在一起以根据传入的内容进行查询。如果我们有一个可以传入(或不传入)的具有 6 个输入参数的方法,我将需要大量的准备好的陈述来解释所有的可能性。

我曾考虑过使用诸如 Hibernate 之类的 ORM 工具,但我正在使用 iSeries 数据库并且表的构造不是很好。也许有一天我可以重写 Hibernate 并写出 900 行 SQL 语句......但一步一步。

【问题讨论】:

  • 在存储过程中。
  • 嗯,首先,您应该始终使用预编译语句(PreparedStatements)。这样,您的所有查询通常都可以是带有参数的固定字符串。如果你注入它们,如果你修改查询,可能你将不得不更改代码,所以我宁愿问你你的特定案例的需求(非功能性要求)是什么,这样更容易给你一些客观的答案。

标签: java sql spring architecture


【解决方案1】:

同意 Thiharas 的回答,但为什么不更进一步,将它们保存在应用程序中的 .sql 文件中。每个查询都有自己的文件,因此更易于管理。

当然,如果像 Hibernate 这样的 ORM 框架不适合您的应用程序。

【讨论】:

  • 我的问题是我有很多不同的 SQL 组合可以构建,很难将它们全部放在存储过程中。 SQL 是在调用该方法时通过 Java 字符串连接生成的。 Hibernate 将是完美的……但它是一个遗留系统(iSeries 数据库)。也许有一天,但我需要一步一步地走。
  • 你能用准备好的语句使用 SQL 文件吗?
【解决方案2】:

关于哪里是最好的地方没有规定:这有点像“把我的钥匙放在家里最好的地方”。

如果您的项目需要您从应用程序外部访问 SQL,那么为什么不将它们放在属性文件中。在这种情况下,您可能需要通过执行一些 JUnit 测试来检查 Sql 中的更改是否仍与您的应用兼容。

存储过程的优点在于其执行速度,但不好的地方在于它们将您的应用配置拆分为两个位置。此外,它们与数据库软件紧密耦合(这又取决于项目可能是好事还是坏事)

希望我的回答能帮助您根据自己的情况问自己正确的问题。

最好的问候, 齐德

【讨论】:

    【解决方案3】:

    这不是唯一的原因。当 SQL 语句在 Java 代码之外时,您可以更改它而无需重新编译和部署您的应用程序。如果查询是定期从文件中加载的(比如每 8 小时一次),那么您甚至不必重新启动服务器。这对从事生产应用程序支持的人员非常有益。

    还有第一个你认为不是好理由的原因;当您必须调试一个大型 SQL 语句并需要将其粘贴到查询执行器中时,删除所有 + 和 '"' 标志,我相信您会改变主意 :-)

    【讨论】:

    • 我不得不用 + 和 " 调试巨大的 SQL 语句,是的,它们很痛苦。我只是设置了一些 JUnit 测试,允许我通过调试从变量中提取 SQL,所以希望那些日子已经一去不复返了,不管 SQL 在哪里。
    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多