我应该将 SQL 文件放在 Java 项目中的什么位置?

2022-09-01 17:34:26

我有一个Java项目,它将包括许多用于查询数据库的大型SQL语句。我的问题是:我应该在哪里存储它们?

我很确定我希望每个语句都有自己的文本文件,由源代码控制管理。由于Java不支持多行字符串,我无法轻松地将SQL放在我的文件中,我认为我无论如何都不想这样做。在构建时,我可以将这些文本文件放在JAR中,并使用ClassLoader.getResourceAsStream()获取内容。.java

所以我的问题变成了我应该把这些文件放在哪个目录中,我应该怎么称呼它们。理想情况下,我希望人们从文件中知道哪个Java类使用它。我绝对不想要的是一个目录,里面装满了很多文件,比如等等。.sqlreport1.sqlreport3.sql

我的倾向是将它们与所有文件一起放在包目录中,但我有一个同事不喜欢在这个树中拥有除文件之外的任何内容。因此,这导致了镜像Java包的单独目录结构的替代,但这似乎是不必要的开销。.java.java

因此,我很想听听您对SQL文件做了什么。

我们使用 Netbeans 6.5 以防这会影响您的答案。

(这个问题是相似的,但可悲的是,答案是非常特定于C#的,这对这个问题有好处,但对我来说很糟糕。


答案 1

在Java/Maven设置中,我们用作项目层次结构:

project/src/main/java/Package/Class.java
project/src/test/java/Package/ClassTest.java
project/src/main/resources/Package/resource.properties
project/src/test/resources/Package/test_resource.properties

为了回答你的问题:我会把SQL文件和资源放在src/main/resources下。

您可能想看看这个线程


答案 2

我很想把SQL查询放在src下的专用文件夹中。这将 Java 代码与 SQL 分开:SQL

+ src
  + java 
  + sql
     - Package/Class.sql
+ test

或者,您可以使用上述结构将它们放入简单的属性文件中:

getUserByName = select * from users where name=?

getUserByEmail = select * from users where email=?

getUserByLongQuery = select * from users where email=? \
   and something = ? \
   where something_else = ?

另外,我认为值得一提的是,如果您更喜欢采用该路线,则可以将多行字符串放入Java类中:

class MyClass {
    MY_QUERY = "select * from users where email = ? " + 
               "and something_else = ?";
}

推荐