【问题标题】:Spring jdbc templates : What is the best way to keep sql statement out of codeSpring jdbc模板:将sql语句保留在代码之外的最佳方法是什么
【发布时间】:2011-09-29 12:06:42
【问题描述】:

Spring JDBC 模板中似乎没有命名查询支持。命名查询是指在 java 代码中按名称引用 sql 语句并将实际语句保存在某个配置文件中的工具。

在缺乏开箱即用支持的情况下,我正在研究将 sql 语句保留在 java 代码之外的最佳方法。

以下是替代方案:

  1. 属性文件
  2. xml 属性文件
  3. spring 上下文 xml(依赖注入)

cmets?

【问题讨论】:

    标签: java spring spring-jdbc


    【解决方案1】:

    Java - Storing SQL statements in an external file

    我做了一个系统,其中查询也存储在数据库中,对于我们所需要的而言,它绝对是完美的,但非常有趣。进行查询查找的查询也在数据库中,当它崩溃时引起了极大的欢闹(不要问)。

    【讨论】:

    • 所以你需要一个查询来获得一个查询来获得一个查询...... Eeek!我想我不想再考虑这个了。绝对不问!
    【解决方案2】:

    您认为作为替代方案的所有方法都可以使用,但是如果您将语句从 Java 类中移出 对我来说是不必要的,那么您正在为您的设计添加额外的层。考虑将语句保留在 Java 类之外的开销。

    • 将加载属性和 XML 以获取单个语句。
    • Inject 会将不必要的语句注入到类中。

    如果我是你,我将创建一个类并将语句列在 static final 中。这使其透明,避免不必要的层,并使其对将来维护您的代码的人灵活。

    例子:

    //This does the job
    public class SQLStatements
    {
      static public final String GET_NAME="SELECT Name FROM some_table WHERE ID=?";
    }
    

    【讨论】:

    • 问题是,如果查询发生变化,则强制类重新加载。如果您的所有代码无论如何都依赖于查询的具体细节,这本质上还不错,但是当它不依赖时,并且如果您处于禁止或不可能的环境中,那么它就不是初学者。
    • 无论使用哪种方法都会导致重新加载,除非在占位符上放置了更改侦听器。
    • (或者您每次都检索查询。)但是“如果时间戳更改则重新加载文本文件”和“执行类加载”之间存在 巨大 区别,这可能需要重新启动完整的应用程序。
    • 查询更改需要更改业务规则,这实际上需要生命周期控制,因此需要版本部署。如果没有任何查询,应用程序将具有原子性更改。
    • 这不一定是真的。
    【解决方案3】:

    我希望将所有 SQL 查询存储在属性或 xml 文件中。 然后在程序启动时获取所有查询并将它们存储在 Map 或 Properties 对象中。

    这提供了即使在代码部署之后更改查询的可行性。 我们可以更改属性文件中的查询,然后重新启动应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      相关资源
      最近更新 更多