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

时间:2017-06-14 11:30:52

标签: java sql spring

我想为数据库操作提供REST Web服务。 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 statement,我必须事先知道参数类型(以及参数的数量)。因此必须或多或少硬编码语句提取。

但是我希望能够在运行时替换sql语句(例如添加或删除参数)而无需触及java代码。所以我可以在不重新启动服务的情况下更改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>

然后只使用Map中的参数提供sql语句。

问题:是否存在任何现有框架,它提供了在外部文件中模板化sql的机制。并使用HashMap中的参数(例如,可能通过POST动态地从Web服务接收)来提供sql语句?

旁注:文件中的sql必须是本机sql。我无法使用例如HSQL或类似的东西。 Sidenote2:我不是在寻找ORM,我知道在数据库和java bean之间存在hibernate映射。但我对将sql结果映射到bean不感兴趣。我的重点是能够动态地交换sql语句,而不必重新编译。

0 个答案:

没有答案