我使用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?还是有其他的图书馆?
答案 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的巨大开销。