将sql查询保存到外部文件中

时间:2015-03-03 08:48:34

标签: java spring

我使用Spring进行数据库操作。现在我将我的sql查询保存到xml文件中,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
 <comment>This query returns something extremely useful.
 </comment>
 <entry key="date.sql">
 "update something set time = ? where sharedkey = ?"
 </entry>
</properties>

在JDBCTemplate中我有这个:

public Properties readProperties(String xmlFileName) throws Exception {
         Properties properties = new Properties();
         InputStream is = this.getClass().getClassLoader().getResourceAsStream(xmlFileName);
         properties.loadFromXML(is);
         return properties;
        }

public void updateDate(){
properties = readProperties("queries.xml");
sqlQuery = properties.getProperty("date.sql");
jdbcTemplateObject.update(sqlQuery,new Object[] {time,token});
}

工作,但我认为不是最好的解决方案,我怎么能用Spring?还是有其他的图书馆?

2 个答案:

答案 0 :(得分:0)

您可以通过多种方式实现这一目标。最好的方法是

1&GT;通过将查询放在属性文件中并使用Spring PropertyPlaceHolder

调用它们

2 - ;您仍然可以使用XML并可以使用JAXB或SAX XML Parser获取查询。

答案 1 :(得分:0)

请参阅提供此功能的ElSql库。

小型ElSql项目允许轻松加载和管理SQL语句的外部文件。它最初是为了与Spring一起工作而编写的(尽管它现在可以在没有Spring作为依赖的情况下工作)。

该文件可以存储在&#34; raw&#34; SQL,或使用DSL:

-- an example comment
@NAME(SelectBlogs)
  @PAGING(:paging_offset,:paging_fetch)
    SELECT @INCLUDE(CommonFields)
    FROM blogs
    WHERE id = :id
      @AND(:date)
        date > :date
      @AND(:active)
        active = :active
    ORDER BY title, author
@NAME(CommonFields)
  title, author, content

// Java code:
bundle.getSql("SelectBlogs", searchArgs);

DSL将文件分成@NAME块,可以从代码中引用。每个块都由重要的空格缩进定义。

可以使用其他标签,例如@PAGING(插入必要的分页代码,例如FETCH / OFFSET)和@AND(仅在指定的变量存在时输出,用于动态构建搜索) )。可选DSL标记的目标是提供在尝试以数据库中立方式构建动态SQL时经常遇到的常见基础。

我们将它用于我们的SQL并避免ORM的巨大开销。