Spring集成 – 外部化JDBC查询

有没有一种简单的方法可以从jdbc出站网关外部化大sql查询,而不是内联它? 原因是我们需要做很多大的查询,我们希望将它们放在自己的文件中,或者至少将它们外化到bean中。

一些警告:

  • 我无法控制数据库,所以我无法在那里创建任何东西(例如存储过程)
  • 我不想仅为这个问题创建类,我只是想组织/重构它,而不是让它更复杂,引入许多其他步骤
  • 我更喜欢创建裸.sql文件,但是将查询放在带有bean的xml中也是可以的
  • 我没有选择使用hibernate,坚持使用spring集成jdbc

关于如何更好地组织这个的建议,考虑到我们将有许多其他出站网关,欢迎:)

例如,我不希望在“int-jdbc:outbound-gateway”元素中使用SQL内联,如下所示:

  

我用答案做了什么

只是:

          

它也适用于bean内部使用的“:payload”参数。

您可以将XML中的查询定义为spring bean:

        

使用CDATA,查询文本可以包括换行符,尖括号等,因此它清晰易读,您可以将其直接剪切并粘贴到SQL工具中。

您可以使用SpEL引用bean。

是的,您可以将它们放在属性文件中,并使用属性占位符${...}来解决它们,或者您可以使用SpEL …

 "#{myQueryBean.queryOne}" 

其中myQueryBean是一个 ,它是一个带有方法的类的实例……

 public String getQueryOne() {...} 

或类上的静态常数……

 "#{T(foo.Queries).QUERY_ONE}" public static final String QUERY_ONE = "...";