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