Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 如何使用动态参数替换将sql语句外部化?_Java_Sql_Spring - Fatal编程技术网

Java 如何使用动态参数替换将sql语句外部化?

Java 如何使用动态参数替换将sql语句外部化?,java,sql,spring,Java,Sql,Spring,我想为数据库操作提供RESTWebService。SQL语句应该在本地文件中外部化(而不是在代码中) 还可以在外部文件中定义参数类型 通常情况下,一份声明应写成: String sql = "SELECT * from user_table WHERE id=?"; PreparedStatement stm = c.prepareStatement(sql); stm.setInt(1, 345); //stm.setString(2, "username"); stm.executeUpda

我想为数据库操作提供RESTWebService。SQL语句应该在本地文件中外部化(而不是在代码中)

还可以在外部文件中定义参数类型

通常情况下,一份声明应写成:

String sql = "SELECT * from user_table WHERE id=?";
PreparedStatement stm = c.prepareStatement(sql);
stm.setInt(1, 345);
//stm.setString(2, "username");
stm.executeUpdate();
问题:如果我只是从文件导入
sql语句
,我必须事先知道参数类型(以及参数的数量)。因此,必须或多或少地对获取语句进行硬编码

但是我希望能够在运行时替换sql语句(例如添加或删除参数),而不必接触java代码。因此,我可以在不重新启动服务的情况下更改sql

Like(伪代码):


从id=?的用户_表中选择*?名称=?
然后只需向sql语句提供映射中的参数

问:是否有任何现有框架提供了这样一种机制,用于在外部文件中模板化sql。并向sql语句提供来自
HashMap
的参数(例如可以通过
POST
动态地从Web服务接收)

旁注:文件中的sql必须是本机sql。我不能使用如HSQL或类似的。
旁注2:我不是在寻找ORM,我知道数据库和JavaBean之间有hibernate映射。但我对将sql结果映射到bean不感兴趣。我的重点是能够在无需重新编译的情况下动态交换sql语句。

我不确定是否在跟踪您。你好像在说ORM。特别是如果您的问题是“是否有任何现有框架提供了这样一种在外部文件中模板化sql的机制”。但在之前,当您讨论参数类型时,会让它听起来有些不同。请澄清一下,我想把sql放在一个外部文件中,例如xml文件。该文件中的sql语句应该在运行时可以更改,这样我就可以执行修改后的sql,而无需重新部署或重新启动。要输入sql的参数来自JSON POST请求。因此,应该动态地将其设置到该sql中(从xml文件读取)。因此,我可以引入一个附加的
,其中name=?
,通过webservice提供一个附加参数,然后可以直接运行sql.NamedParameterSJDBCTemplate?否。在本例中,您可以看到它们对
SELECT*
语句使用显式类型,例如
Integer.valueOf(empid)
。我的意图是独立于类型,否则我无法在运行时更改sql语句。
<definition>
  <sql id="getUsers">
     <statement>SELECT * from user_table WHERE id=? and name=?</statement>
     <param idx="1" type="Integer"/>
     <param idx="2" type="String"/>
  </sql>
</definition>