2015-03-03 49 views
0

我使用Spring进行数据库操作。现在我救我的SQL查询到一个XML文件中,就像这样:将sql查询保存到外部文件中

<?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}); 
} 

工作,但我认为这是不是最好的解决办法,我怎么能与春天?还是有其他的库?

+0

_我觉得它不是最好的解决方案_你是什么意思,从这个角度来看,你问这个问题? – 2015-03-03 08:58:25

+0

@HimanshuBhardwaj我想从代码 – 2015-03-03 09:00:28

+0

中分离查询,通常我们使用Spring与hibernate或spring一起使用JPA进行数据库调用。是否使用spring MVC? – SpringLearner 2015-03-03 09:00:51

回答

0

您可以通过多种方式实现此目的。按照最好的办法是

1>通过将查询属性文件,并使用Spring PropertyPlaceHolder

2调用它们>您仍然可以使用XML,并且可以使用JAXB或SAX XML解析器得到查询。

0

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

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

该文件可以被存储在“原始” 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的重大开销。

相关问题