在Java中创建流水线SQL/NOSQL查询

在Java中创建流水线SQL/NOSQL查询,java,apache-camel,spring-integration,Java,Apache Camel,Spring Integration,我正在尝试用Java创建一个框架,该框架将支持链式/流水线查询,其中一个查询的输出将被转换为另一个查询的输入。类似这样的查询将在运行时进行。我看了看一些框架,发现 &因为它们提供了链接和路由(企业集成模式)的概念。我发现ApacheCamel比Spring集成(IMHO)更好 我应该选择ApacheCamel作为我的框架,还是有更好的方法来实现这一点 我的查询语法是 Query query1 = "select customer.id from customer where customer.

我正在尝试用Java创建一个框架,该框架将支持链式/流水线查询,其中一个查询的输出将被转换为另一个查询的输入。类似这样的查询将在运行时进行。我看了看一些框架,发现 &因为它们提供了链接和路由(企业集成模式)的概念。我发现ApacheCamel比Spring集成(IMHO)更好


我应该选择ApacheCamel作为我的框架,还是有更好的方法来实现这一点

我的查询语法是

Query query1 = "select customer.id from customer where customer.name = 'ABC'";
Query query2 = "select account.id from account where account.custid in {$1}";
// $1 will be the input of second query
from(query1).inputto(query2).printOutput();
这是可能的使用和一些基本的驼峰功能(如),让您内联的结果解析

[CAMEL-JDBC]结果作为ArrayList[HashMap[String,Object]]返回到OUT body中 列表对象包含行列表和映射 对象包含以字符串键作为列名的每一行

然后可以使用此结果动态构造后续查询

from("direct:start")
  .setBody(constant("select customer.id as ID from customer where customer.name = 'ABC'"))
  .to("jdbc:myDataSource")

  //now, use simple/ognl to extract the first result and the 'ID' from the Map in the body
  .setBody(simple("select account.id from account where account.custid in ${body[0][ID]}"))
  .to("jdbc:myDataSource")

  .log("ACCOUNT IDS = ${body}");
这是可能的使用和一些基本的驼峰功能(如),让您内联的结果解析

[CAMEL-JDBC]结果作为ArrayList[HashMap[String,Object]]返回到OUT body中 列表对象包含行列表和映射 对象包含以字符串键作为列名的每一行

然后可以使用此结果动态构造后续查询

from("direct:start")
  .setBody(constant("select customer.id as ID from customer where customer.name = 'ABC'"))
  .to("jdbc:myDataSource")

  //now, use simple/ognl to extract the first result and the 'ID' from the Map in the body
  .setBody(simple("select account.id from account where account.custid in ${body[0][ID]}"))
  .to("jdbc:myDataSource")

  .log("ACCOUNT IDS = ${body}");

我将在SQL
select account.id from account中链接SQL语句,customer其中account.custid=customer.id和customer.name='ABC'
从数据库中提取数据只是为了再次传回,这听起来效率很低。我同意这是一种更好的方法,但我的sql表将位于分布式数据库中,可能是sql或NOSQL。因此,查询对象将负责执行。我将保留所有可能在逻辑上连接在一起的数据。如果可能的话,我只会将不相关的数据放入不同的数据库。我会尽量只使用一两个数据库,为您提供所需的一切。我同意这也是我的模式,但我的框架希望满足不同部门拥有自己的数据库(如人力资源、财务、销售)并具有共同标识符的需要。这是合理的,但我不鼓励这样做。;)我将在SQL
select account.id from account中链接SQL语句,customer其中account.custid=customer.id和customer.name='ABC'
从数据库中提取数据只是为了再次传回,这听起来效率很低。我同意这是一种更好的方法,但我的sql表将位于分布式数据库中,可能是sql或NOSQL。因此,查询对象将负责执行。我将保留所有可能在逻辑上连接在一起的数据。如果可能的话,我只会将不相关的数据放入不同的数据库。我会尽量只使用一两个数据库,为您提供所需的一切。我同意这也是我的模式,但我的框架希望满足不同部门拥有自己的数据库(如人力资源、财务、销售)并具有共同标识符的需要。这是合理的,但我不鼓励这样做。;)我可以通过某种方式传递我的对象而不是依赖setBody()中的toString方法吗?或者我可以通过某种方式使用对象吗?您可以使用处理器或Bean在路由中执行任何您想执行的操作…看,我可以通过某种方式传递我的对象而不是依赖setBody()中的toString方法吗或者有没有一种方法可以让我使用对象?你可以使用处理器或Bean在路由中做任何你想做的事情…看,