Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringJDBC模板:防止sql语句出现在代码之外的最佳方法是什么_Java_Spring_Spring Jdbc - Fatal编程技术网

Java SpringJDBC模板:防止sql语句出现在代码之外的最佳方法是什么

Java SpringJDBC模板:防止sql语句出现在代码之外的最佳方法是什么,java,spring,spring-jdbc,Java,Spring,Spring Jdbc,SpringJDBC模板中似乎没有命名查询支持。所谓命名查询,我指的是在java代码中按名称引用sql语句并将实际语句保存在某个配置文件中的工具 在缺少开箱即用支持的情况下,我正在研究将sql语句保持在java代码之外的最佳方法 以下是备选方案: 属性文件 xml属性文件 spring上下文xml(依赖项注入) 注释?您认为作为替代方案的所有方法都会起作用,但是如果您将这些语句从Java类中移出,那么您将在设计中添加额外的层,这对我来说是不必要的。考虑将语句保持在java类之外的开销。 属性和

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

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

以下是备选方案:

  • 属性文件
  • xml属性文件
  • spring上下文xml(依赖项注入)

  • 注释?

    您认为作为替代方案的所有方法都会起作用,但是如果您将这些语句从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=?";
    }
    


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

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

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

    问题是,如果查询发生更改,将强制重新加载类。如果您的所有代码都依赖于查询的细节,那么这从本质上来说并不坏,但如果它不依赖于查询的细节,并且如果您所处的环境禁止或不可能这样做,那么这就不是一个好方法。使用哪种方法都会导致重新加载,除非更改侦听器放在占位符上。(或者您每次都检索查询。)但“如果时间戳发生变化,则重新加载文本文件”和“执行类加载”之间存在巨大差异,这可能需要重新启动整个应用程序。查询更改需要更改业务规则,这实际上需要生命周期控制,因此需要版本部署。一个应用程序在查询中会有原子变化(如果没有的话)。这根本不一定是真的。所以你需要一个查询来获得一个查询来获得一个查询……Eeek!我想我不想再考虑这个了。绝对不要问!